“星火投球”;java.lang.OutOfMemoryError:超出GC开销限制;
我有一个Spark作业抛出“java.lang.OutOfMemoryError:超出GC开销限制” 作业正在尝试处理文件大小为4.5G的文件 我尝试了以下spark配置:“星火投球”;java.lang.OutOfMemoryError:超出GC开销限制;,java,garbage-collection,apache-spark,Java,Garbage Collection,Apache Spark,我有一个Spark作业抛出“java.lang.OutOfMemoryError:超出GC开销限制” 作业正在尝试处理文件大小为4.5G的文件 我尝试了以下spark配置: --num-executors 6 --executor-memory 6G --executor-cores 6 --driver-memory 3G 我试着增加更多的内核和执行器,这有时会起作用,但处理文件需要20多分钟 我能做点什么来提高性能吗?还是停止Java堆问题 您可以尝试增加驱动程序内存。如果您没有足够的
--num-executors 6 --executor-memory 6G --executor-cores 6 --driver-memory 3G
我试着增加更多的内核和执行器,这有时会起作用,但处理文件需要20多分钟
我能做点什么来提高性能吗?还是停止Java堆问题
唯一的解决方案是微调配置 根据我的经验,我可以对OOM说以下几点:
- 仅当要多次使用RDD时才缓存它
但是,如果需要缓存,那么考虑一下对资源和数据的分析和应用。
- 如果集群有足够的内存,则将
增加到最大值spark.executor.memory
- 增加分区数以增加并行性
- 增加用于缓存spark.storage.memoryFraction的专用内存。如果涉及大量的随机内存,那么请尽量避免或小心地分割分配
- Spark的缓存功能Persist(内存和磁盘)是以额外处理(序列化、写入和读回数据)为代价提供的。在这种情况下,CPU使用率通常过高
spark.executor.memory
,您可能会很幸运。我不认为这是真正由您的--executor内存参数设置的。看看这篇文章:你也在缓存RDD吗???@Mark-尝试过了,但问题现在出现了,并且得到了解决。我已经尝试增加驱动程序内存,但没有任何乐趣。没有计划延误。作业在5-10秒内开始运行。