我想知道:
答案 0 :(得分:6)
在YARN术语中,执行者和应用程序主人在“容器”内运行。 Spark提供纱线特定属性,因此您可以运行您的应用程序:
spark.yarn.executor.memoryOverhead
是每个执行程序要分配的堆外内存量(以兆字节为单位)。这是一个内存,可以解决诸如VM开销,实习字符串,其他本机开销等问题。这往往随着执行程序的大小而增长(通常为6-10%)。spark.yarn.driver.memoryOverhead
是以群集模式为每个驱动程序分配的堆外内存量(以兆字节为单位),其中内存属性为执行程序的memoryOverhead。所以它不是关于存储数据,它只是YARN正常运行所需的资源。
在某些情况下,
例如如果启用dynamicAllocation
,您可能希望显式设置这些属性以及在此过程中可以创建的最大执行程序数(spark.dynamicAllocation.maxExecutors
)通过询问成千上万的遗嘱执行人来轻松压倒YARN,从而使已经运行的遗嘱执行人失去了。
spark.dynamicAllocation.maxExecutors默认设置为无穷大,如果启用动态分配,则设置执行程序数的上限。 [参考文献。http://spark.apache.org/docs/latest/configuration.html#dynamic-allocation]
增加执行程序的目标数量是为了响应等待安排的积压任务。如果调度程序队列在N秒内没有耗尽,则添加新的执行程序。如果队列持续另外M秒,则添加更多执行程序,依此类推。每轮中添加的数字从上一轮开始呈指数增长,直到达到上限。上限基于已配置的属性以及当前运行和挂起任务的数量,如上所述。
在某些可能破坏YARN资源管理器的情况下,这会导致执行程序数量呈指数级增长。就我而言:
16/03/31 07:15:44 INFO ExecutorAllocationManager: Requesting 8000 new executors because tasks are backlogged (new desired total will be 40000)
这并未涵盖可以使用这些属性的所有用例,但它提供了有关如何使用这些属性的一般概念。