配置profile-high-memory仍遇Spark模块OOM错误,请求协助排查
Spark模块OOM问题排查方案
针对两次Spark模块因OOM终止作业、切换高内存配置和重启环境均无效的问题,可从以下方向入手排查解决:
- 排查数据倾斜
检查作业中是否存在Key分布极度不均的情况(比如某个Key的记录量远超其他Key),这类情况会导致单个Executor负载过载触发OOM。可尝试调整spark.sql.shuffle.partitions增大shuffle分区数,或给倾斜Key添加随机前缀拆分后再聚合。 - 确认高内存配置是否实际生效
不要默认认为切换profile-high-memory配置就已生效,去Spark作业启动日志中搜索spark.executor.memory、spark.driver.memory等参数,或查看Spark UI的Environment页面,确认配置的高内存参数是否真的加载成功。 - 优化代码逻辑
- 避免在Driver端加载超大数据集,尽量将数据处理逻辑下推到Executor执行
- 检查是否存在不必要的宽依赖操作,能用窄依赖(如map)实现的就替换掉宽依赖(如groupBy+map)
- 先对大表做过滤、采样处理,减少实际需要处理的数据量
- 调优Spark内存分配比例
调整spark.memory.fraction和spark.memory.storageFraction参数,平衡执行内存与存储内存的占比,避免存储内存占用过多执行内存空间。 - 分析GC日志定位根因
开启GC日志(添加JVM参数-XX:+PrintGCDetails -XX:+PrintGCTimeStamps),查看是否存在频繁Full GC或内存泄漏情况,明确是哪部分内存占用过高导致OOM。 - 清理无用缓存
检查代码中是否存在使用cache()或persist()缓存数据后未及时unpersist()的情况,过多未释放的缓存会挤占可用内存。
内容的提问来源于stack exchange,提问作者Meenam
相关产品推荐
相关产品推荐

