作为《为什么 Spark UI 上显示的 Executor Cores 与 Yarn 上的 vCore 数量不符?》的姊妹篇,我们再来看另外一种更“离奇”的情况,这种情况下,Spark UI上显示的Executor数量和每个Executor占用的核数与请求值完全对应不上。如果再仔细观察一下可以发现如下规律:实际分配的Executor数量往往比申请的数量少,单个Executor的合数一般比申请的值大,但是:总的分配的核数与申请的数量(--num-executors × --executor-cores
)是可以对齐的。
特别说明的是:本文描述的情况排除了集群不足和DynamicAllocation
等众所周知的原因,其次,本文讨论的这一问题仅限于AWS EMR集群上(并非所有EMR版本都有此问题,本文测试的是:EMR 6.11
),OSS Spark没有此问题。接下来,我们先看一下测试的情况。
集群配置
为了便于观察资源占用情况,我们特别使用了只有一个Worker节点的EMR集群,版本为EMR 6.11
(注意:不是所有的EMR版本都会表现出本文描述的情形,例如 EMR 6.8
,因为集群的默认配置会有差异,具体差异后面会单独解释) ,其中:Master节点:8 vCore / 64 GB, 1个Core节点:16 vCore / 128 GB,总计