Foundry资源队列如何为Spark作业分配vCPU资源?含实例疑问
Foundry资源队列的vCPU分配逻辑解析
执行器环境配置
| 配置项 | 值 |
|---|---|
| adaptiveExecutorEnabled | true |
| driverCores | 1 |
| dynamicAllocationEnabled | true |
| dynamicAllocationMaxExecutors | 16 |
| executorCores | 2 |
| executorRequestCores | 1.2 |
核心问题解答
1. 显示的21是执行器还是核心数?
是vCPU核心总数,不是执行器数量。其中包含两部分:任务driver进程占用的1个核心(对应driverCores=1),以及所有运行中执行器的核心占用总和。
2. 为何核心数是21而非配置的16?
dynamicAllocationMaxExecutors=16是允许启动的最大执行器数量,不是核心数上限。核心总数的计算逻辑是:核心总数 = driver核心数 + 运行中执行器数量 × 单执行器实际占用核心数
结合你的配置,每个执行器的核心占用可以在executorRequestCores=1.2(初始申请值)到executorCores=2(最大上限)之间动态调整,同时执行器数量会根据任务负载增减(不超过16)。你看到的21个核心,比如可能是10个执行器各占用2核心,加上driver的1核心,10×2+1=21,完全符合配置规则。
3. 资源队列的实际运作:固定还是动态分配?
是动态分配+弹性释放的模式,具体流程:
- 任务启动时,先申请driver的1个核心,再根据初始任务量,以
executorRequestCores=1.2的规格启动少量执行器; - 任务执行过程中,若发现有未处理的任务积压,Foundry会自动增加执行器数量(不超过16个),同时每个执行器会根据负载扩展核心占用到
executorCores=2的上限; - 当执行器空闲时,Foundry会逐步释放空闲的执行器,或降低其核心占用,把资源归还到队列中,供其他任务使用。
资源队列不会固定锁定21个vCPU,而是完全根据任务的实时需求弹性调整,始终在配置的执行器数量上限和核心范围内运作。
内容的提问来源于stack exchange,提问作者user5233494
相关产品推荐
相关产品推荐

