数据量:
1~2G左右的表与3~4T的大表进行Join
拆分
将任务数据分为多个结果RDD,将各个RDD的数据写入临时的hdfs目录,最后合并
取所需的字段和数据,并去重,减少data shuffle的规模
调整并行度和shuffle参数
spark-submit 参数
#提高shuffle阶段的任务并行度,降低单个任务的内存占用
--conf spark.default.parallelism=2000
#提高shuffle 缓冲区大小
--conf spark.shuffle.file.buffer=128k
#增加堆外内存大小
--conf spark.yarn.executor.memoryOverhead=1g
增加资源
这就不细说了,num-executors 不是越多越好 有边界
优化数据倾斜
检查数据是否是skewed data,即join出的key value pair大小极度不均,解决方案可以参考:
https://zhuanlan.zhihu.com/p/21483985