Spark on Yarn集群Application Master最大限制25.0如何修改?
你的集群配置是4个Worker节点(16GB内存/4核CPU),当前遇到Yarn调度器UI显示Configured Max Application Master Limit: 25.0,提交应用时提示Queue's AM resource limit exceeded,且之前尝试的参数未生效,问题出在你调整的参数不对,没有命中控制队列AM数量的关键配置。
关键配置说明
Configured Max Application Master Limit对应的是队列级别的AM数量上限,你需要调整以下两个核心参数:
yarn.scheduler.capacity.root.<队列名>.max-am-percent
这个参数直接控制队列中同时运行的AM数量占队列总应用数的比例,默认值是0.5(50%)。如果你的应用都提交到默认的root队列,就设置yarn.scheduler.capacity.root.max-am-percent;若提交到子队列(比如root.default)则替换为对应队列路径。yarn.scheduler.capacity.root.<队列名>.maximum-applications
这个参数设置队列允许的最大应用总数,你的集群显示25.0,大概率是该参数被限制后,结合max-am-percent的默认50%计算得出的结果(比如队列最大应用数设为50,50*0.5=25)。
具体修改步骤
方式1:修改Yarn配置文件(capacity-scheduler.xml)
找到Yarn的capacity-scheduler.xml配置文件,添加或修改以下参数(以root队列为例):
<property> <name>yarn.scheduler.capacity.root.maximum-applications</name> <value>100</value> <!-- 根据实际需求调整,比如设为50 --> </property> <property> <name>yarn.scheduler.capacity.root.max-am-percent</name> <value>1.0</value> <!-- 允许队列中所有运行的应用都是AM,只要资源足够 --> </property>
修改后重启Yarn ResourceManager服务,配置才会生效。
方式2:通过集群创建命令修改(如果用脚本/云平台创建集群)
在你现有的集群创建参数中添加以下两行:
--properties yarn:yarn.scheduler.capacity.root.maximum-applications=100 \ --properties yarn:yarn.scheduler.capacity.root.max-am-percent=1.0
重新创建集群后配置会自动生效。
额外注意事项
- 若使用子队列(比如
root.default),需要把参数中的root替换为完整队列路径,例如yarn.scheduler.capacity.root.default.max-am-percent。 - 实际可运行的AM数量受限于集群资源:你的集群总CPU是44=16核,每个Spark AM(Driver)占用1核,因此最多同时运行16个AM;内存总可用为413544=54176MB,每个AM用1024MB,内存能支持约53个AM,最终受限于CPU资源,最多16个并行AM。
内容的提问来源于stack exchange,提问作者Sujay

