问题描述:Spark Driver GC负载高
问题建议:
1、调整内存与并发相关的参数(以下参数根据任务特点选一个或多个参数调整优化):
spark.driver.memory参数 向大调整
spark.sql.shuffle.partitions 参数向小调整
2、去掉mapjoin hit,如果用户有使用/*mapjoin*/ hit的用户建立都删除
3、如果同时收到“Spark Broadcast阈值不合理”,请优化处理“Spark Broadcast阈值不合理”报警
优化方法:
1.调整内存相关的参数。
spark.driver.memory=$[目前值]*1.5
spark.driver.cores=$[目前值]*1.5
2.如果上述优化效果不明显, 请继续按照下述方法进行优化:
- spark.sql.shuffle.partitions 参数向小调整
- 去掉mapjoin hit,如果用户有使用/*mapjoin*/ hit的用户建立都删除
- 如果同时收到“Spark Broadcast阈值不合理”,请优化处理“Spark Broadcast阈值不合理”报警 , 添加参数 spark.sql.autoBroadcastJoinThreshold=-1
Dirver GC频繁,解决方法: 增加客户端内存和dirver内存 spark引擎:关闭广播 --conf spark.driver.memory=16g --conf spark.sql.broadcastTimeout=-1; hive引擎: 如果是python脚本,则直接加入: os.environ["HADOOP_CLIENT_OPTS"]="-Xmx16g" 如果是shell脚本, 则加入: export HADOOP_CLIENT_OPTS="-Xmx16g" 注:Dirver的内存大小不能超过cgroup的上限,否则任务会被杀掉,用户可以同步调大客户端cgroup上限
2、如果是使用spark-submit原始方式提交,观察driver-memory的值
如果未手动设置driver-memory,那cgroup应该设置成10g;
如果手动设置了driver-memory,
spark.driver.memory >= 25g,那cgroup应该大于30g
spark.driver.memory >= 20g,那cgroup应该大于25g
spark.driver.memory >= 15g,那cgroup应该大于19g
spark.driver.memory >= 10g,那cgroup应该大于13g