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

AWS EMR 5.30.1上PySpark任务collect调用停滞的排查求助

调试AWS EMR 5.30.1上PySpark任务卡在collect()的问题

从你提供的日志和任务描述来看,核心问题是YARN资源管理器(RM)与节点管理器(NM)之间的通信异常,再加上节点标签配置不匹配,这直接导致你的Spark任务无法正常调度资源,最终卡在collect()调用(因为这个操作需要将分布式计算结果拉回Driver,而底层集群通信故障会让任务彻底停滞)。下面是逐步调试的建议:

1. 先确认YARN核心服务的运行状态

首先要排查最基础的服务可用性:

  • 登录EMR控制台,进入你的集群的「Hardware」标签页,确认所有主节点、核心/任务节点的状态都是「Running」,没有异常退出的节点。
  • 登录主节点,执行以下命令检查YARN服务:
    # 检查ResourceManager状态
    sudo status hadoop-yarn-resourcemanager
    # 检查NodeManager状态
    sudo status hadoop-yarn-nodemanager
    
    如果有服务未运行,重启对应的服务:
    sudo restart hadoop-yarn-resourcemanager
    # 或针对节点管理器
    sudo restart hadoop-yarn-nodemanager
    

2. 修复节点标签配置错误

从YARN NM的日志里能看到明确的错误:

Node Labels {CORE} reported from NM with ID ip-10-0-192-171.us-west-2.compute.internal:8041 was rejected from RM with exception message as : Not all labels being replaced contained by known label collections, please check, new labels=[CORE]

这说明你的节点上报了RM未识别的CORE标签,导致节点注册异常,资源无法被调度。解决方法:

  • 如果你不需要节点标签功能,可以在后续创建集群时移除节点标签的配置;如果需要保留,登录主节点给RM添加对应标签:
    yarn rmadmin -addToClusterNodeLabels "CORE(exclusive=true)"
    
  • 添加标签后,重启所有节点的NodeManager服务,让节点重新向RM注册。

3. 找到Spark任务的正确日志位置

你提到找不到任务日志,在EMR的Spark集群模式(--deploy-mode cluster)下,Driver日志是存在YARN的应用日志中的:

  • 先通过以下命令找到你的任务的Application ID(应用名称是Spark_Sample):
    yarn application -list
    
  • 然后用Application ID拉取完整的Driver和Executor日志:
    yarn logs -applicationId <你的ApplicationID>
    
  • 另外,在EMR控制台的「Applications」标签下,找到对应的Spark应用,点击进去也能直接查看日志,这里面会包含任务卡在collect()的具体细节。

4. 优化Spark提交参数

你的提交命令和脚本有几个可以调整的地方,避免潜在冲突:

  • 脚本中已经通过.master("yarn")指定了集群模式,而spark-submit命令又加了--master yarn,这属于重复配置,建议移除脚本中的.master("yarn"),以命令行参数为准。
  • 集群模式下,spark.driver.memory=4g和spark.driver.cores=2是分配给YARN上的Driver容器的,要确认你的主节点有足够的剩余资源(EMR 5.30.1默认主节点资源如果不足,Driver容器可能无法启动)。
  • 调试阶段可以先关闭动态分配(spark.dynamicAllocation.enabled=false),减少变量,等任务正常运行后再开启。

5. 排查节点间网络连通性

第一个异常中的Connection refused是节点初始化时的网络问题,可能是安全组或防火墙限制了端口:

  • 确认EMR集群的安全组允许节点之间的内网通信(默认EMR安全组是允许的,但如果自定义了安全组,要检查是否开放了YARN所需的端口:8025(RM的ResourceTracker端口)、8032(RM Admin端口)、8042(NM Web端口)等)。
  • 在节点上用telnet ip-10-0-217-37.us-west-2.compute.internal 8025测试端口连通性,如果不通,调整安全组规则或关闭节点上的防火墙。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:37:51