Spark性能调优-总结分享

1、Spark调优背景

目前Zeppelin已经上线一段时间,Spark作为底层SQL执行引擎,需要进行整体性能调优,来提高SQL查询效率。本文主要给出调优的结论,因为涉及参数很多,故没有很细粒度调优,但整体调优方向是可以得出的。

环境:服务器600+,spark 2.0.2,Hadoop 2.6.0

2、调优结果

调优随机选取线上9条SQL,表横轴是调优测试项目,测试在集群空闲情况下进行,后一个的测试都是叠加前面测试参数。从数据可参数经过调优,理想环境下性能可提高50%到300%

3、 下面为调优分享PPT

1)一图概览

这里写图片描述

2) Spark集群优化——数据本地性

这里写图片描述

3)Spark集群优化——存储格式选择

这里写图片描述

4)Spark参数优化——计算资源

这里写图片描述

5) Spark参数优化——并行度

这里写图片描述

6)Spark参数优化——offheap内存

这里写图片描述

7)Spark参数优化——大小表join

这里写图片描述

8)Spark参数优化——其他

这里写图片描述

9) Spark参数优化——shuffle过程

这里写图片描述

10)Spark代码优化——RDD复用

这里写图片描述

11)Spark代码优化——选择合适算子

这里写图片描述

12) Spark代码优化——shuffle算子并行度调优

这里写图片描述

13)Spark代码优化——数据倾斜

这里写图片描述

14)Spark代码优化——优化数据结构

这里写图片描述

15)Spark代码优化——使用DateSet API

这里写图片描述

16)Spark代码优化——使用DateSet API

这里写图片描述

17) 目前Spark的瓶颈——内存

这里写图片描述

18) 目前Spark的瓶颈——内存

这里写图片描述

3、总结

调优参数虽名目多样,但最终目的是提高CPU利用率,降低带宽IO,提高缓存命中率,减少数据落盘。 
不同数据量的最优参数都不相同,调优目的是让参数适应数据的量级以最大程度利用资源,经调优发现并不是所有参数有效,有的参数的效果也不明显,最后折中推荐如下调优参数以适应绝大多数SQL情况,个别SQL需要用户单独调参优化。(以下参数主要用于Spark Thriftserver,仅供参考)

参数 含义 默认值 调优值
spark.sql.shuffle.partitions 并发度 200 800
spark.executor.overhead.memory executor堆外内存 512m 1.5g
spark.executor.memory executor堆内存 1g 9g
spark.executor.cores executor拥有的core数 1 3
spark.locality.wait.process 进程内等待时间 3 3
spark.locality.wait.node 节点内等待时间 3 8
spark.locality.wait.rack 机架内等待时间 3 5
spark.rpc.askTimeout rpc超时时间 10 1000
spark.sql.autoBroadcastJoinThreshold 小表需要broadcast的大小阈值 10485760 33554432
spark.sql.hive.convertCTAS 创建表是否使用默认格式 false true
spark.sql.sources.default 默认数据源格式 parquet orc
spark.sql.files.openCostInBytes 小文件合并阈值 4194304 6291456
spark.sql.orc.filterPushdown orc格式表是否谓词下推 false true
spark.shuffle.sort.bypassMergeThreshold shuffle read task阈值,小于该值则shuffle write过程不进行排序 200 600
spark.shuffle.io.retryWait 每次重试拉取数据的等待间隔 5 30
spark.shuffle.io.maxRetries 拉取数据重试次数 3 10

如果觉得文章有什么值得讨论的欢迎来讨论,如果觉得文章不错,也希望点个赞作为对我的支持。

你可能感兴趣的:(Spark)