YARN 的 ResourceManager、NodeManager 和 ApplicationMaster 分别负责什么?
本文目录
面试怎么回答
ResourceManager 是全局资源管理和应用入口,负责在队列与应用之间分配 Container;NodeManager 运行在每个节点,负责本机 Container 的启动、监控和资源汇报;ApplicationMaster 每个应用一个,向 RM 申请资源,并协调 NodeManager 执行和跟踪本应用任务。Container 只是资源分配单位,具体运行 Executor 还是 Map Task 取决于应用框架。排障时我会按 RM 队列、AM 申请和 NM 节点三层定位。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
ApplicationMaster 挂了,不代表 ResourceManager 挂了;某个 NodeManager 异常,也不等于整个集群不能接收新任务。
YARN 把全局资源管理、单应用协调和单机执行拆给了不同组件。
ResourceManager 管全局资源,NodeManager 管单台机器上的 Container,ApplicationMaster 管一个应用的资源申请和任务生命周期。
ResourceManager:全局资源仲裁者
ResourceManager 是集群级组件,负责接收应用提交、管理应用生命周期,并在不同队列和应用之间分配资源。
它内部的 Scheduler 根据队列容量、优先级和资源请求分配 Container,但不会直接执行每一个业务 Task。ApplicationsManager 则负责接收提交,并为 ApplicationMaster 协调第一个 Container。
NodeManager:每台机器的资源代理
每个工作节点运行一个 NodeManager,负责启动、停止和监控本机 Container,并统计 CPU、内存等资源使用情况,再通过心跳向 ResourceManager 汇报。
某个 NodeManager 故障时,影响的是这个节点上的 Container。调度系统可以在其他健康节点重新申请资源,具体任务如何恢复由对应应用框架处理。

ApplicationMaster:一个应用一个主控
每个 YARN Application 都有自己的 ApplicationMaster。它向 ResourceManager 注册并申请 Container,再与相应 NodeManager 通信,启动和监控本应用任务。
Spark on YARN 中,ApplicationMaster 还会与 Driver 的部署模式产生关系;MapReduce 则使用自己的 MRAppMaster。AM 是框架相关的,不是全局只有一个。
Container:资源配额,不是固定进程类型
Container 表示一组已分配资源,例如内存和 vCore,以及可能的其他资源约束。NodeManager 在这个边界内启动具体命令。
因此“Container 就是 Executor”并不准确。Spark 可以用 Container 启动 Executor,MapReduce 可以用它启动 Map 或 Reduce Task,含义由应用框架决定。
一个典型场景
某 Spark 任务提交后长时间没有 Executor,第一反应是 NodeManager 不够。继续查看发现 ApplicationMaster 已经启动,但所在队列没有可用容量,资源请求一直等待 Scheduler 分配。
增加单个节点不一定立刻解决,因为队列上限和用户限制仍然生效。排障需要依次确认应用状态、AM、队列 headroom、Container 请求和节点健康。
YARN 排障先判断问题发生在集群、应用还是节点层。