我试图在这里解释Spark的默认行为。我的设想是这样的:
- 我在一个有一个主节点和10个核心/从节点的集群上提交了一个Spark作业。
- 这些核心节点是根据其现货可用性和价格随机选择的。
- 它们总共可能有10个或1000个内核和任意数量的内存。
- 每个执行器的内核数的默认设置(每个执行器4个内核)没有改变,并且在Spark提交中没有
num_executors
设置 - 一旦我提交了作业,它开始运行,我可以看到产生了许多执行器。
- 这个数字可能等于从示例的数量,但通常更大。
- 我想了解一下executors数量背后的默认逻辑是什么 *。如果用户没有明确定义执行器的数量,Spark使用什么公式来得出这个数字?
有大量的文献集中在如何自己提出最佳的执行器数量并将其作为Spark配置提供,但我找不到任何解释默认行为的东西。
谢谢你,我很好
1条答案
按热度按时间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.minExecutors
和spark.dynamicAllocation.maxExecutors
之间缩放。[1]https://spark.apache.org/docs/latest/configuration.html#dynamic-allocation