前文:spark优化三部曲(二)--代码优化_dkk2014的博客-优快云博客
spark优化三部曲(一)--瓶颈分析_dkk2014的博客-优快云博客
1.shuffle参数
shuffle参数大都是围绕,单词读写的数据量大小,io,网络稳定性等
2.timeout参数
目的是为了提高稳定性
spark.network.timeout=120s //默认120s |
3.本地性参数
发生任务倾斜的时候可以设置,可查看我这篇文章
spark的task分布不均匀,某些executor没有领取任务_dkk2014的博客-优快云博客_spark task分布不均匀
4.内存模型参数
可以调整内存模型的各个分区比例和开启堆外内存(不建议开启堆外,任务会不稳定)
可自行搜索 spark统一内存管理
5.JVM参数
打印日志,根据不同的垃圾回收处理器设置参数等
通常在GC状态不好(web ui看飙红)的时候开启。
这边建议开启G1,G1对大数据处理非常友好
--conf 'spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseG1GC'
6.AQE参数
解决spark sql的大部分数据倾斜,小文件问题,动态分区裁剪,以及最优解的join等
7.num-executors executor-cores executor-memory
这可能是spark新人最经常接触也最迷惑的点了
先给个通用配置
num-executors 看任务整体并发度(被划分成了多少个task)
executor-cores=2
executor-memory=8G-16G
如果有多线程安全问题(比如mapPartition里有线程不安全的操作)
executor-cores=1(只能为1)
executor-memory=4G-16G
了解更多看我另外一篇文章spark如何合理的分配资源(executor-memory,num-executors,executor-cores)_dkk2014的博客-优快云博客