美文网首页
2019-03-05 SparkSQL集群性能调优 CheatS

2019-03-05 SparkSQL集群性能调优 CheatS

作者: 2efper | 来源:发表于2019-03-05 16:02 被阅读0次

    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.autoBroadcastJoinThresholdspark.sql.bigdata.useExecutorBroadcast。小表在join 右端。

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

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

    相关文章

      网友评论

          本文标题:2019-03-05 SparkSQL集群性能调优 CheatS

          本文链接:https://www.haomeiwen.com/subject/aehouqtx.html