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

PySpark配置与Yarn Top内存显示不一致问题排查

问题描述

在EMR集群主节点执行yarn top后得到如下输出:

ARN top - 13:27:57, up 0d, 1:34, 1 active users, queue(s): root
NodeManager(s): 6 total, 6 active, 0 unhealthy, 2 decommissioned, 0 lost, 0 rebooted
Queue(s) Applications: 3 running, 8 submitted, 0 pending, 5 completed, 0 killed, 0 failed
Queue(s) Mem(GB): 18 available, 189 allocated, 1555 pending, 0 reserved
Queue(s) VCores: 44 available, 20 allocated, 132 pending, 0 reserved
Queue(s) Containers: 20 allocated, 132 pending, 0 reserved

APPLICATIONID USER             TYPE      QUEUE PRIOR   #CONT  #RCONT  VCORES RVCORES     MEM    RMEM  VCORESECS    MEMSECS %PROGR       TIME NAME
 application_1663674823778_0002 hadoop          spark    default     0      10       0      10       0     99G      0G      18754     187254  10.00   00:00:33 PyS
 application_1663674823778_0003 hadoop          spark    default     0       9       0       9       0     88G      0G       9446      84580  10.00   00:00:32 PyS
 application_1663674823778_0008 hadoop          spark    default     0       1       0       1       0      0G      0G        382        334  10.00   00:00:06 PyS

其中,application_1663674823778_0002和application_1663674823778_0003通过直接执行pyspark命令启动,未修改任何配置,Yarn内存显示正常;而application_1663674823778_0008通过命令pyspark --conf spark.executor.memory=11g --conf spark.driver.memory=12g启动,自定义了内存配置,但在Yarn Top中该应用的MEM和RMEM均显示为0,请问这是什么原因?

问题原因分析

出现这种情况主要有以下几个可能的原因:

  • 应用启动时间过短,资源未完成分配
    从输出看该应用仅运行了6秒,处于启动初期。Spark在YARN模式下启动时,需先申请Driver容器,再调度Executor容器。如果容器还在初始化或资源调度阶段,YARN尚未完成资源分配的统计同步,就会出现MEM和RMEM显示为0的情况。等待10-20秒后重新执行yarn top,大概率能看到正常数值。

  • 自定义内存配置超出YARN资源限制
    设置的spark.executor.memory=11g和spark.driver.memory=12g可能超过了YARN单容器内存上限(比如yarn.scheduler.maximum-allocation-mb参数限制),或集群剩余资源无法满足该申请。此时YARN无法分配对应内存,容器处于pending状态,yarn top就会显示MEM为0。可以执行yarn application -status application_1663674823778_0008查看应用详细状态,确认资源申请是否被拒绝或处于pending。

  • YARN Top统计存在延迟
    YARN Top的指标是定期从ResourceManager拉取的,存在统计延迟。刚启动的应用资源分配信息可能还未同步到统计模块,导致显示异常,稍等片刻重新执行命令即可。

  • 未配置YARN内存Overhead
    Spark内存配置需要考虑YARN的内存Overhead(通过spark.yarn.executor.memoryOverhead和spark.yarn.driver.memoryOverhead控制),默认是executor内存的10%(最小384MB)。如果只设置了业务内存而未预留Overhead,YARN可能无法正确识别应用的总内存需求,进而导致统计异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:01:40