减少执行者核心数量会消耗更少的执行者内存吗?

时间:2019-04-29 17:31:50

标签: apache-spark yarn

我的Spark作业失败,并显示YARN错误Container killed by YARN for exceeding memory limits 10.0 GB of 10 GB physical memory used

直觉上,我将核心数从5减少到1,工作成功运行。

我没有增加executor-memory,因为10g是我的YARN群集的最大值。

我只是想确认我的直觉。减少executor-cores的数量会减少executor-memory的消耗吗?如果是这样,为什么?

2 个答案:

答案 0 :(得分:2)

是的,每个执行者会额外使用7%的memoryOverhead。

将在您有两个节点的情况下创建此计算,因此我们在一个节点中有三个执行者,在另一个节点中有两个执行者。

* xml b = buildXml()

您可以在此处阅读其他说明: https://spoddutur.github.io/spark-notes/distribution_of_executors_cores_and_memory_for_spark_application.html

答案 1 :(得分:2)

spark.executor.cores = 5, spark.executor.memory=10G

这意味着执行者可以并行运行5个任务。这意味着5个任务需要共享10 GB内存,因此平均而言有效-每个任务将有2 GB可用空间。如果所有任务消耗的内存超过2 GB,那么最终整个JVM的消耗将超过10 GB,因此YARN将杀死该容器。

spark.executor.cores = 1, spark.executor.memory=10G

这意味着执行者只能运行1个任务。这意味着10 GB完全可用于一项任务。因此,如果任务使用的内存大于2 GB但小于10 GB,它将可以正常工作。在您的工作中就是这种情况,因此行之有效。