spark.yarn.driver.memoryOverhead或spark.yarn.executor.memoryOverhead是用来存储什么样的数据的?

the spark.yarn.driver.memoryOverhead or spark.yarn.executor.memoryOverhead is used to store what kind of data?

我想知道:

在 YARN 术语中,执行器和应用程序主机 运行 在“容器”中。 Spark 提供纱线特定属性,因此您可以 运行 您的应用程序 :

  • spark.yarn.executor.memoryOverhead 是要为每个执行程序分配的堆外内存量(以兆字节为单位)。这是内存,用于解释 VM 开销、驻留字符串、其他本机开销等。这往往会随着执行程序的大小(通常为 6-10%)而增长。
  • spark.yarn.driver.memoryOverhead 是集群模式下每个驱动程序分配的堆外内存量(以兆字节为单位),内存属性作为执行程序的 memoryOverhead。

所以这与存储数据无关,它只是 YARN 正常 运行 所需的资源。

在某些情况下,


e.g 如果启用 dynamicAllocation,您可能希望明确设置这些属性以及可以创建的最大执行程序数 (spark.dynamicAllocation.maxExecutors)在此过程中,YARN 很容易通过请求数以千计的执行程序而使 YARN 不堪重负,从而失去已经 运行ning 的执行程序。

增加执行器的目标数量是为了响应等待安排的积压任务。如果调度程序队列在 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)


这并未涵盖可以使用这些 属性 的所有用例,但它给出了有关如何使用它们的一般概念。