Linux下如何运行sql脚本

Linux下如何运行sql脚本,第1张

Linux运行sql脚本的具体 *** 作步骤如下:

1、使用shell工具登陆到安装postgresql的服务器,切换到postgres用户,postgresql默认的 *** 作用户,命令是:su - postgres,查看当前路径是/var/lib/psql,创建一个test.sql脚本文件,命令是:vim test.sql。

2、sql脚本内容是:create table test (id int not null primary key,name text)insert into test valus(1, 't1')

3、执行test.sql脚本,命令是:psql -f test.sql

这里是因为postgresql安装本机上,在第一步中我们切换到了postgres用户,因此这里默认就是postgres用户来 *** 作,不用带上用户名和密码。执行结果如下,可以看到有两个提示:

create table

insert 0 1

执行完成后,我们登入数据库,命令是:psql

4、进入psql交互式命令行后,我们执行两个查看命令:\d

可以看到表test确实已经创建成功,然后执行命令:\d test

可以看到表中字段是id和name,和我们创建语句中内容一样,说明第一条语句执行成功。

5、查看表中数据,命令是:select * from test

显示出来的值是1,t1,说明第二条执行语句也执行成功,说明test.sql脚本执行成功。

6、默认是postgres用户,本机 *** 作是,不需要用户和密码,现在我们来试试 *** 作远程linux服务器上的postgresql,也就是说执行本地的脚本文件,在远程服务器上创建表。如下面图中所示,命令是:psql -U test1 -h 192.168.1.194 -f test.sql,输入对应用户的密码。

7、登陆到这个远程服务器上,命令是:psql -U test -h 192.168.194

执行查看命令:\d,\d test

最后查询数据库:select * from test结果和上面都一致。

一般以

#!/bin/sh

开头(不是必须要写,但一定要单独一行),指定执行这个脚本的shell程序(也可以用#!/bin/zsh或其他),然后就是堆命令了。Linux的shell脚本支持很多功能,加上Linux高度模块化的命令,完全可以用shell脚本写出复杂的程序。

以上只是简单介绍如何开始写shell脚本,如果要写复杂的脚本,还需要深入学习相关知识(如if——fi、case——esac等结构)。

当然,还需要给脚本加上可执行权限(chmod +x ./file.sh),否则可以用

sh ./file.sh

方式执行脚本(这里的sh是执行脚本所需shell,命令也可以是zsh ./file.sh或其他)。

0.买高性能机器,增加节点

1.设置磁盘文件预读值大小为16384,使用linux命令:

echo 16384 >/sys/block/{磁盘名}/queue/read_ahead_kb

2. Spark 任务序列化只支持JavaSerializer,数据序列化支持JavaSerializer和 KryoSerializer 。KryoSerializer能达到JavaSerializer的十倍。

3.在spark.driver.extraJavaOptions和spark.executor.extraJavaOptions配置项中添加参数:" -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps ",如果频繁出现Full GC,需要优化GC。把RDD做Cache *** 作,通过日志查看RDD在内存中的大小,如果数据太大,需要改变RDD的存储级别来优化。

4.一般并行度设置为集群CPU总和的2-3倍

5.大表和小表做join *** 作时可以把小表Broadcast到各个节点,从而就可以把join *** 作转变成普通的 *** 作,减少了shuffle *** 作。

6. 合理设计DAG,减少shuffle  //TODO

7.使用 mapPartitions 可以更灵活地 *** 作数据,例如对一个很大的数据求TopN,当N不是很大时,可以先使用mapPartitions对每个partition求TopN,collect结果到本地之后再做排序取TopN。这样相比直接对全量数据做排序取TopN效率要高很多。

8.当之前的 *** 作有很多filter时,使用 coalesce 减少空运行的任务数量

9.当任务数过大时候Shuffle压力太大导致程序挂住不动,或者出现linux资源受限的问题。此时需要对数据重新进行分区,使用 repartition 。

10.配置多个磁盘给 localDir ,shuffle时写入数据速度增快

11. 别collect大数据量,数据会回到driver端,容易OOM。非要collect,请配置 spark.sql.bigdata.thriftServer.useHdfsCollect 为true,会存在hdfs再读

12.尽量用reduceByKey,会在Map端做本地聚合

13. broadcase set/map而不是Iterator, set/map 查询效率O(1) ,iteratorO(n)

14. 数据发生倾斜,repartition大法 ,查出key,salt it

15.使用Hash Shuffle时,通过设置 spark.shuffle.consolidateFiles 为true,来合并shuffle中间文件,减少shuffle文件的数量,减少文件IO *** 作以提升性能

16.Spark SQL 小表join,把小表broadcast出去。配置 spark.sql.autoBroadcastJoinThreshold 和 spark.sql.bigdata.useExecutorBroadcast 。小表在join 右端。

17.SparkSQL数据倾斜,配置 spark.sql.planner.skewJoin 和 spark.sql.planner.skewJoin.threshold

18. SparkSQL 小文件,配置 spark.sql.small.file.combine 和  spark.sql.small.file.split.size


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/8691987.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-19
下一篇2023-04-19

发表评论

登录后才能评论

评论列表(0条)

    保存