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
相关产品推荐
相关产品推荐

