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

PySpark应用提交至AWS EMR后持续处于ACCEPTED状态求助

PySpark应用在AWS EMR中持续处于ACCEPTED状态的解决方案

问题描述

我创建了一个包含1个主节点和1个核心节点的AWS EMR集群,通过主节点执行命令spark-submit --master yarn --deploy-mode cluster app.py提交PySpark应用,但应用始终显示INFO Client: Application report for application_1663517069168_0003 (state: ACCEPTED),无法进入运行状态。日志诊断信息显示队列的ApplicationMaster(AM)资源限制已超出,关键诊断内容如下:

[2022年9月18日 18:25:24 UTC] 应用已添加到调度器但尚未激活。队列的AM资源限制已超出。详情:AM分区=CORE;AM资源请求=<内存:2432MB,最大内存:6144MB,虚拟核心:1,最大虚拟核心:4>;队列AM资源限制=<内存:3072MB,虚拟核心:1>;队列的用户AM资源限制=<内存:3072MB,虚拟核心:1>;队列AM资源使用=<内存:2432MB,虚拟核心:1>;

完整日志:

22/09/18 18:25:16 INFO RMProxy: 连接到ResourceManager节点 ip-172-31-90-73.ec2.internal/172.31.90.73:8032
22/09/18 18:25:16 INFO Client: 从包含1个NodeManager的集群请求新应用
22/09/18 18:25:16 INFO Configuration: 未找到resource-types.xml
22/09/18 18:25:16 INFO ResourceUtils: 无法找到'resource-types.xml'。
22/09/18 18:25:16 INFO ResourceUtils: 添加资源类型 - 名称=memory-mb,单位=Mi,类型=COUNTABLE
22/09/18 18:25:16 INFO ResourceUtils: 添加资源类型 - 名称=vcores,单位=,类型=COUNTABLE
22/09/18 18:25:16 INFO Client: 验证应用请求未超过集群最大容器内存限制(6144 MB/容器)
22/09/18 18:25:16 INFO Client: 将分配AM容器,内存为2432 MB(包含384 MB开销)
22/09/18 18:25:16 INFO Client: 为AM设置容器启动上下文
22/09/18 18:25:16 INFO Client: 为AM容器设置启动环境
22/09/18 18:25:16 INFO Client: 为AM容器准备资源
22/09/18 18:25:16 WARN Client: 未设置spark.yarn.jars或spark.yarn.archive,将回退到上传SPARK_HOME下的库文件。
22/09/18 18:25:19 INFO Client: 上传资源文件:/mnt/tmp/spark-fb80e661-49d6-4738-8f29-351b4efdf337/__spark_libs__2372700901935780238.zip -> hdfs://ip-172-31-90-73.ec2.internal:8020/user/hadoop/.sparkStaging/application_1663517069168_0003/__spark_libs__2372700901935780238.zip
22/09/18 18:25:21 INFO Client: 上传资源文件:/home/hadoop/app.py -> hdfs://ip-172-31-90-73.ec2.internal:8020/user/hadoop/.sparkStaging/application_1663517069168_0003/app.py
22/09/18 18:25:21 INFO Client: 上传资源文件:/usr/lib/spark/python/lib/pyspark.zip -> hdfs://ip-172-31-90-73.ec2.internal:8020/user/hadoop/.sparkStaging/application_1663517069168_0003/pyspark.zip
22/09/18 18:25:21 INFO Client: 上传资源文件:/usr/lib/spark/python/lib/py4j-0.10.7-src.zip -> hdfs://ip-172-31-90-73.ec2.internal:8020/user/hadoop/.sparkStaging/application_1663517069168_0003/py4j-0.10.7-src.zip
22/09/18 18:25:21 INFO Client: 上传资源文件:/mnt/tmp/spark-fb80e661-49d6-4738-8f29-351b4efdf337/__spark_conf__1449366969974574614.zip -> hdfs://ip-172-31-90-73.ec2.internal:8020/user/hadoop/.sparkStaging/application_1663517069168_0003/__spark_conf__.zip
22/09/18 18:25:22 INFO SecurityManager: 修改查看权限为: hadoop
22/09/18 18:25:22 INFO SecurityManager: 修改修改权限为: hadoop
22/09/18 18:25:22 INFO SecurityManager: 修改查看权限组为: 
22/09/18 18:25:22 INFO SecurityManager: 修改修改权限组为: 
22/09/18 18:25:22 INFO SecurityManager: SecurityManager: 认证已禁用;UI权限已禁用;拥有查看权限的用户: Set(hadoop);拥有查看权限的组: Set();拥有修改权限的用户: Set(hadoop);拥有修改权限的组: Set()
22/09/18 18:25:24 INFO Client: 向ResourceManager提交应用application_1663517069168_0003
22/09/18 18:25:24 INFO YarnClientImpl: 已提交应用application_1663517069168_0003
22/09/18 18:25:25 INFO Client: 应用application_1663517069168_0003的报告(状态: ACCEPTED)
22/09/18 18:25:25 INFO Client: 
     客户端令牌: N/A
     诊断信息: [Sun Sep 18 18:25:24 +0000 2022] 应用已添加到调度器但尚未激活。队列的AM资源限制已超出。详情: AM分区=CORE;AM资源请求=<内存:2432,最大内存:6144,vCores:1,最大vCores:4>;队列AM资源限制=<内存:3072,vCores:1>;队列的用户AM资源限制=<内存:3072,vCores:1>;队列AM资源使用=<内存:2432,vCores:1>; 
     ApplicationMaster主机: N/A
     ApplicationMaster RPC端口: -1
     队列: default
     启动时间: 1663525524352
     最终状态: UNDEFINED
     跟踪URL: http://ip-172-31-90-73.ec2.internal:20888/proxy/application_1663517069168_0003/
     用户: hadoop
22/09/18 18:25:26 INFO Client: 应用application_1663517069168_0003的报告(状态: ACCEPTED)
22/09/18 18:25:27 INFO Client: 应用application_1663517069168_0003的报告(状态: ACCEPTED)
22/09/18 18:25:28 INFO Client: 应用报告.......

问题分析

当前default队列的AM资源已接近饱和:虚拟核心已用满队列限制的1个,内存已使用2432MB(占队列3072MB限制的约79%),新提交的应用无法获取足够资源启动AM,因此一直处于等待调度的ACCEPTED状态。

解决方案

  • 清理闲置应用:执行命令查看当前运行的应用:
    yarn application -list
    
    对不需要的应用执行 kill 命令释放资源:
    yarn application -kill <application-id>
    
  • 降低AM资源请求:提交应用时减少AM的内存请求,例如将Driver内存设为1GB(YARN会自动添加开销,总内存将低于队列限制):
    spark-submit --master yarn --deploy-mode cluster \
      --conf spark.driver.memory=1g \
      app.py
    
  • 调整队列AM资源限制:修改EMR的capacity-scheduler.xml配置文件,提升default队列的AM资源上限:
    • 设置yarn.scheduler.capacity.root.default.am.max-memory为更高值(如4096MB)
    • 设置yarn.scheduler.capacity.root.default.am.max-vcores为更高值(如2)
      修改后重启YARN ResourceManager生效,或在创建集群时通过EMR配置参数预先设置。
  • 扩容核心节点:增加集群核心节点数量,提升集群总资源,队列的AM资源限制会随集群资源比例自动调整,从而获得更多可用资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:51:20