欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sparksql java.lang.OutOfMemoryError: GC overhead limit exceeded

程序员文章站 2022-06-14 09:08:42
...

问题分析:

查看yarn 任务详情 Tracking URL:ApplicationMaster 界面,观察数据分配,发现tasks 的 suffer size分布不均匀。判断为 大表 left jion 小表 left join 大表的关联方式 ,产生了数据倾斜,造成内存溢出。

  sparksql java.lang.OutOfMemoryError: GC overhead limit exceeded

解决方案:

方案1:设置Spark-SQL adaptive 自适应框架参数

需要在插入语句末尾添加分布键语句,distribute by 。

SET spark.sql.adaptive.enabled=true; -- 默认false  自适应执行框架的开关
SET spark.sql.adaptive.shuffle.targetPostShuffleInputSize=268435456; -- 默认为67108864     动态调整reduce个数的partition大小依据,如设置64MB则reduce阶段每个task最少处理64MB的数据

-- spark.sql.adaptive.minNumPostShufflePartitions -- 默认为1     reduce个数区间最小值
-- spark.sql.adaptive.maxNumPostShufflePartitions -- 默认为500     reduce个数区间最大值
-- spark.sql.adaptive.shuffle.targetPostShuffleRowCount -- 默认为20000000 动态调整reduce个数的partition条数依据,如设置20000000则reduce阶段每个task最少处理20000000条的数据

方案2:设置设置JVM参数

set spark.sql.autoBroadcastJoinThreshold=-1; -- 禁用广播
set spark.driver.extraJavaOptions=-XX:+UseG1GC; -- 对Driver的JVM配置
set spark.executor.extraJavaOptions=-XX:+UseG1GC; -- 对Executor的JVM配置