YARN运行应用页Allocated CPU VCores与Spark UI Executors页Cores不一致问题
核心原因
- 该现象既不是统计偏差也不是已知Bug,是YARN默认资源计算器的统计逻辑和Spark资源申请逻辑不一致导致的。
- YARN默认使用
DefaultResourceCalculator作为资源计算器,该计算器仅统计内存资源,完全不统计CPU资源:不管你给单个Executor Container配置多少CPU核,YARN都会把每个Container(Driver和Executor各占用1个Container)统一统计为1个vCore,因此你会看到总分配vCore数为1(Driver)+1(Executor)=2。 - Spark UI显示的25核以及实际观察到的25个并行任务是真实生效的配置:Spark侧的任务槽位完全按照
spark.executor.cores参数分配,不受YARN侧CPU统计逻辑的影响,任务并行度不会出现损失。
让YARN侧显示正确vCore数的方法
如果需要YARN页面的CPU统计值和实际配置一致,需要修改YARN的资源计算器配置:
- 若使用Capacity Scheduler(默认调度器),修改
yarn-site.xml中的配置:
<property> <name>yarn.scheduler.capacity.resource-calculator</name> <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value> </property>
- 若使用Fair Scheduler,修改
yarn-site.xml中的配置:
<property> <name>yarn.scheduler.fair.resource-calculator</name> <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value> </property>
- 修改配置后重启YARN ResourceManager服务,后续提交的Spark任务在YARN页面就会显示正确的vCore分配数,你的场景下会显示为1(Driver)+25(Executor)=26个vCore。
注意事项
未修改资源计算器配置的情况下,YARN侧的vCore统计值仅为展示异常,完全不影响Spark任务的实际运行效果和并行度,无需担心任务性能受损。
内容的提问来源于stack exchange,提问作者Vikas
相关产品推荐
相关产品推荐

