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

Spark作业停留在ACCEPTED状态无法推进,状态显示UNDEFINED

解决Spark作业卡在ACCEPTED状态&spark-shell挂起的问题

老哥,你这个问题的核心其实很明确——从日志里的「队列的AM资源限制内存和vCores均为0」就能看出来,YARN的队列配置直接把ApplicationMaster(也就是Spark作业的“总指挥”)的资源配额锁死了,哪怕集群节点有空闲资源,也没法分配给AM启动,自然作业一直卡在ACCEPTED,spark-shell也挂起不动。

下面给你一步步说怎么排查修复:

1. 定位YARN队列配置文件

首先找到Hadoop安装目录下的etc/hadoop/capacity-scheduler.xml(默认使用容量调度器,都是这个文件)。

2. 修改队列的AM资源配额

打开配置文件,找到对应队列(默认是default队列)的以下配置项:

  • yarn.scheduler.capacity.default.maximum-am-resource-percent:这个参数控制队列中可分配给AM的资源占队列总资源的百分比,默认应该是0.1(10%),如果被设成0就会导致AM无法获取资源。
  • 另外还要检查yarn.scheduler.capacity.default.max-am-resource-mb和yarn.scheduler.capacity.default.max-am-resource-vcores,这两个是AM能使用的最大内存和vCore数,如果设为0也会限制资源分配。

把这些配置改成合理值,比如给default队列配置:

<property>
  <name>yarn.scheduler.capacity.default.maximum-am-resource-percent</name>
  <value>0.1</value>
  <description>队列中可用于运行ApplicationMaster的最大资源占比</description>
</property>
<property>
  <name>yarn.scheduler.capacity.default.max-am-resource-mb</name>
  <value>2048</value>
  <description>单个AM可使用的最大内存(你的节点是8G内存,设2G足够)</description>
</property>
<property>
  <name>yarn.scheduler.capacity.default.max-am-resource-vcores</name>
  <value>1</value>
  <description>单个AM可使用的最大vCore数</description>
</property>

3. 检查节点资源配置(可选但建议)

顺便确认下YARN节点的资源配置是否合理,打开etc/hadoop/yarn-site.xml,检查:

  • yarn.nodemanager.resource.memory-mb:每个NodeManager可分配的总内存,你的节点是8G,建议设为6144(留2G给系统进程)
  • yarn.nodemanager.resource.cpu-vcores:每个NodeManager可分配的总vCore数,根据你的CPU核心数设置,比如4核就设为4

4. 重启YARN服务

修改完配置后,必须重启YARN的ResourceManager和NodeManager才能生效:

# 停止YARN服务
stop-yarn.sh
# 启动YARN服务
start-yarn.sh

5. 验证修复

重启后登录YARN资源管理器WebUI,查看队列的资源配置,确认AM的资源限制已经不是0了。然后再提交SparkPi作业试试:

./bin/run-example SparkPi 10

正常情况下,作业应该会很快从ACCEPTED进入RUNNING状态,spark-shell也能正常启动了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:27:21