Spark工作抛出“java.lang.OutOfMemoryError:超出GC开销限制”

时间:2015-06-15 19:07:31

标签: java garbage-collection apache-spark

我有一个抛出“java.lang.OutOfMemoryError:超出GC开销限制”的Spark作业。

这项工作正在尝试处理文件大小4.5G。

我尝试过以下火花配置:

--num-executors 6  --executor-memory 6G --executor-cores 6 --driver-memory 3G 

我尝试增加更多核心和执行器,但有时会工作,但处理文件需要20多分钟。

我能做些什么来改善表现吗?或者停止Java堆问题?

2 个答案:

答案 0 :(得分:3)

唯一的解决方案是微调配置。

根据我的经验,我可以为OOM说出以下几点:

  • 仅当您要多次使用RDD时才缓存RDD

如果您需要缓存,那么请考虑分析有关资源的数据和应用程序。

  • 如果您的群集有足够的内存,请将spark.executor.memory增加到最大值
  • 增加分区数以增加并行度
  • 增加缓存spark.storage.memoryFraction的专用内存。如果涉及大量的随机存储器,那么请尽量避免或拆分分配
  • Spark的缓存功能Persist(MEMORY_AND_DISK)以额外处理(序列化,写入和读回数据)为代价。在这种情况下,通常CPU使用率太高

答案 1 :(得分:0)

  1. 您可以尝试增加驱动程序内存。如果你没有足够的记忆,你可以从执行者记忆

  2. 减少记忆。
  3. 检查spark-ui以查看调度程序延迟是什么。您可以访问端口4040上的spark UI。如果调度程序延迟很高,通常,驱动程序可能会向执行程序发送大量数据。哪个需要修复。