订阅更新

YARN 的 ResourceManager、NodeManager 和 ApplicationMaster 分别负责什么?

面试问 150 约 3 分钟读完

本文目录
  1. 面试怎么回答
  2. ResourceManager:全局资源仲裁者
  3. NodeManager:每台机器的资源代理
  4. ApplicationMaster:一个应用一个主控
  5. Container:资源配额,不是固定进程类型
  6. 一个典型场景

面试怎么回答

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。调度系统可以在其他健康节点重新申请资源,具体任务如何恢复由对应应用框架处理。

YARN应用运行链路

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 排障先判断问题发生在集群、应用还是节点层。

刷题进度保存在当前浏览器