【发布时间】:2019-04-29 17:31:49
【问题描述】:
我的 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 的消耗吗?如果有,为什么?
【问题讨论】:
-
执行器核心数指定每个执行器可以运行多少个作业。因此,当您有 5 个核心时,每个执行器尝试最多同时运行 5 个作业。如果每个作业都试图达到 10g,那么您将尝试将 50g 的 RAM 用于单个作业。通过将内核数量减少到 1,每个执行程序将仅使用 10g RAM。 mapr.com/blog/resource-allocation-configuration-spark-yarn
-
@bogertron 我认为情况正好相反——每个执行程序的核心数量将共享
executor-memory。例如,在我原来的情况下,如果executor-memory是10g并且exectuor-cores是 5,那么所有 5 个内核将共享 10g 内存。这是一个公平的说法吗? -
我很抱歉,你是对的。至于您提出的问题,您最多运行 5 个并行计算(或线程)。即使您尝试跨线程共享内存,在为执行程序分配的内存空间中每个正在运行的任务也会有额外的开销
-
集群中有多少个节点?你设置
num-executors了吗?