1、调整内存与并发相关的参数(以下参数根据任务特点选一个或多个参数调整优化):
如spark.executor.memory 参数一般向大调整
spark.sql.shuffle.partitions 参数向大调整
spark.executor.cores参数向小调整
spark.dynamicAllocation.maxExecutors参数向大调整
spark.driver.memory参数 向大调整(注意cgroup值也做相应调整)
2、去掉mapjoin hit,如果用户有使用/*mapjoin*/ hit的用户建立都删除
3、如果同时收到“Spark Broadcast阈值不合理”,请优化处理“Spark Broadcast阈值不合理”报警
解决方案一般有两种。
一、调高并行度。调高并行度,一般的参数是spark.sql.shuffle.partitions
二、调高executor的规格。一般只需要适当调高spark.executor.memory。
优化方法:
1.调整内存相关的参数。
spark.executor.memory=$[目前值]*1.5
查看 [目前值] 的方法:
打开自己需要优化的任务
2.如果上述优化效果不明显, 请继续按照下述方法进行优化:
- spark.sql.shuffle.partitions 参数向大调整
- spark.executor.cores参数向小调整
- 去掉mapjoin hit,如果用户有使用/*mapjoin*/ hit的用户建立都删除
- 如果同时收到“Spark Broadcast阈值不合理”,请优化处理“Spark Broadcast阈值不合理”报警 ,添加参数 spark.sql.autoBroadcastJoinThreshold=-1
3. Executor OOM
这种情况下,单个container中 加载同样数据的情况下,跑的线程数过多,可能导致此种情况,增加executor的memory,并且减少executor的core数量;
core:memeory=1:4