Yarn
YARN 深度解析:分布式资源调度框架,到底在调度什么?
在 Hadoop 1.x 时代,JobTracker 既要管资源分配、又要管任务调度,还要管容错——一个组件扛所有,成了单点瓶颈,而且只支持 MapReduce。
YARN 的出现把 JobTracker 拆了:
- ResourceManager:管资源(CPU、内存)
- ApplicationMaster:管应用的执行逻辑
- NodeManager:管单节点上的资源
拆开之后,每个组件只做一件事,而且任何计算框架(MapReduce、Spark、Flink)都可以跑在 YARN 上——只要实现自己的 ApplicationMaster 就行。
YARN 的四个核心组件
| 组件 | 角色 | 类比 |
|---|---|---|
| ResourceManager(RM) | 全局资源总管 | 公司总部,管总预算 |
| NodeManager(NM) | 单节点资源管家 | 每个部门的行政,管本部门资源 |
| ApplicationMaster(AM) | 单个应用的调度员 | 项目经理,管自己的项目 |
| Container | 资源的容器 | 工位 + 电脑 + 工时的组合包 |
它们之间怎么配合?
flowchart TD
subgraph 集群节点
A[ResourceManager<br/>全局资源管理器]
B[NodeManager<br/>节点资源管理器]
C[NodeManager<br/>节点资源管理器]
end
subgraph 应用程序
D[ApplicationMaster<br/>应用主控]
E[Container<br/>资源容器]
F[Container<br/>资源容器]
end
A -- 资源分配 --> B
A -- 资源分配 --> C
A -- 启动/监控 --> D
D -- 申请资源 --> A
D -- 管理任务 --> E
D -- 管理任务 --> F
B -- 提供容器 --> E
C -- 提供容器 --> F
不是 RM 直接调度任务,RM 只管分配资源,具体的任务调度由每个应用的 AM 自己管。
一个 MapReduce 作业在 YARN 上怎么跑
第 1 步:提交作业
客户端向 RM 提交作业。RM 为这个作业启动一个 ApplicationMaster(MRAppMaster)。
第 2 步:AM 申请资源
AM 分析作业需要多少个 Map 和 Reduce 任务,向 RM 申请对应数量的 Container。
第 3 步:启动任务
AM 拿到 Container 后,告诉对应的 NM 在这些 Container 里启动 Map/Reduce 任务。