EC2上的EMR:Spark如何决定它需要生成的执行程序的数量?

l7wslrjt  于 2023-08-06  发布在  Apache
关注(0)|答案(1)|浏览(128)

我试图在这里解释Spark的默认行为。我的设想是这样的:

  • 我在一个有一个主节点和10个核心/从节点的集群上提交了一个Spark作业。
  • 这些核心节点是根据其现货可用性和价格随机选择的。
  • 它们总共可能有10个或1000个内核和任意数量的内存。
  • 每个执行器的内核数的默认设置(每个执行器4个内核)没有改变,并且在Spark提交中没有num_executors设置
  • 一旦我提交了作业,它开始运行,我可以看到产生了许多执行器。
  • 这个数字可能等于从示例的数量,但通常更大。
  • 我想了解一下executors数量背后的默认逻辑是什么 *。如果用户没有明确定义执行器的数量,Spark使用什么公式来得出这个数字?

有大量的文献集中在如何自己提出最佳的执行器数量并将其作为Spark配置提供,但我找不到任何解释默认行为的东西。
谢谢你,我很好

wz1wpwve

wz1wpwve1#

Spark应用程序中执行器的数量将取决于是否启用动态分配。对于静态分配,它由spark.executor.instances(默认值为2)或--num-executors控制。
而启用动态分配spark.dynamicAllocation.enabled: true时,执行器的初始数量由spark.dynamicAllocation.initialExecutors(默认值为spark.dynamicAllocation.minExecutors(默认值为0))确定。如果设置了--num-executors(或spark.executor.instances)且大于此值,则将其用作执行器的初始数量[1]。然后,它可以在spark.dynamicAllocation.minExecutorsspark.dynamicAllocation.maxExecutors之间缩放。
[1]https://spark.apache.org/docs/latest/configuration.html#dynamic-allocation

相关问题