OOM的Spark内存管理

时间:2018-01-31 00:52:58

标签: apache-spark yarn

以下是这种情况:我启动了一个火花作业,但由于OOM的许多任务失败而失败。所以我增加了任务的内存分配。我仍然看到一些节点因OOM而失败,但这项工作终于可以成功。我的问题是Spark如何处理这个问题?似乎Spark可以在尝试失败后重新分配数据。 附:失败的任务是在批处理作业中应用UIView操作。

更新: 我在YARN集群模式下运行批处理作业。所有任务都配置为具有相同的内存。

2 个答案:

答案 0 :(得分:0)

Spark DAGScheduler 构建任务阶段并将任务提交到 TaskScheduler 以运行任务。 TaskScheduler在执行程序上启动任务,并将失败的任务重新运行到不同的执行程序中,并向 DAGScheduler 报告。你可以控制数次,在放弃之前要重试的任务是spark.task.maxFailures。默认值为4.

spark config

请使用重新分区或按顺序增加执行程序内存,以避免重新运行任务。

enter image description here

答案 1 :(得分:0)

Spark肯定会在其他一些执行程序上重试失败的任务,但最多只能进行有限的配置时间。如果您遇到超过10%或20%的OOM任务,那实际上意味着您分配的内存太少,或者每个分区包含太多要处理的数据。对于后面的原因,您需要将数据分发到较小的分区中。