You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在YARN上让Spark Executors均匀分布于集群节点?

解决Spark Executor在YARN上集中调度的问题

要让30个Executor尽可能分散到不同节点(甚至机架),可以通过以下几种方式将YARN放置约束传递给Spark应用:

1. 提交Spark应用时直接指定约束

Spark on YARN支持通过--conf参数传递YARN的应用级放置约束,核心是配置yarn.applications.placement-constraints项。

提交命令示例:

spark-submit \
  --class com.your.package.YourApp \
  --master yarn \
  --deploy-mode cluster \
  --num-executors 30 \
  --conf yarn.applications.placement-constraints="myapp=30,NOTIN,NODE,myapp" \
  your-app.jar
  • 其中myapp是自定义的约束标识,建议设置为唯一值,避免和其他应用的约束冲突
  • 数字30需与num-executors保持一致,确保所有Executor都应用该分散规则

2. 队列级全局配置(适用于同队列所有应用)

如果需要让某个YARN队列下的所有Spark应用默认启用分散放置,可修改队列的调度配置:

  • 容量调度器:在capacity-scheduler.xml中添加队列配置
<property>
  <name>yarn.scheduler.capacity.root.your-queue.placement-constraints</name>
  <value>myapp=30,NOTIN,NODE,myapp</value>
</property>
  • 公平调度器:在fair-scheduler.xml中对应队列添加配置
<queue name="your-queue">
  <placement-constraints>myapp=30,NOTIN,NODE,myapp</placement-constraints>
</queue>

修改后重启YARN资源管理器生效,后续提交到该队列的应用会自动应用约束。

3. 实现机架级分散的调整

如果需要进一步将Executor分散到不同机架,只需将约束中的NODE替换为RACK:

--conf yarn.applications.placement-constraints="myapp=30,NOTIN,RACK,myapp"

注意:需确保YARN集群已正确配置机架感知(节点的机架拓扑信息已通过topology.mapfile或拓扑脚本定义)。

关键注意事项

  • 若集群节点资源不足以承载单个Executor,YARN会优先保证应用启动而忽略约束,需提前确认节点资源充足
  • 约束标识myapp可自定义,只要保证在集群内唯一即可
  • 队列级配置会对该队列下所有应用生效,适合统一管控的场景

内容的提问来源于stack exchange,提问作者Alexey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:24:54