Spark作业因Java堆内存不足异常执行失败问题咨询
解决Spark作业Java堆内存不足异常
这个Java堆内存溢出的问题我在Spark作业开发和调试中碰到好多次了,咱们先明确报错信息,再给你几个实用的解决方向:
报错详情
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space.
常见修复方案
- 调整Driver端内存:如果是Driver进程内存不够(比如要处理大结果集、广播大变量),提交作业时用
--driver-memory参数扩容,示例命令:spark-submit --driver-memory 4g --class com.your.package.YourJob your_job.jar - 调整Executor端内存:大部分情况下是Executor处理数据时内存不足,用
--executor-memory指定更大内存,同时可以搭配--executor-cores优化CPU和内存的配比,示例:spark-submit --executor-memory 8g --executor-cores 4 your_job.jar - 优化作业逻辑:检查是否有不必要的大缓存、冗余数据加载,或者过多的宽依赖Shuffle操作。比如:
- 避免全量加载超大表,改用分区过滤读取
- 调整
spark.shuffle.memoryFraction参数,给Shuffle操作分配更多内存(默认是0.2,可根据情况调到0.3-0.4)
- 排查数据倾斜:如果存在数据倾斜,部分Executor会处理远超平均量的数据,直接撑爆内存。可以通过给大Key加盐拆分、倾斜Key单独处理等方式解决。
内容的提问来源于stack exchange,提问作者KKR
相关产品推荐
相关产品推荐

