Hadoop YARN 架构原理与工作机制详解
一、YARN 核心设计思想
1.1 架构演进背景
- Hadoop 1.0 局限:
- JobTracker 单点故障
- 资源利用率低(Map/Reduce 槽位固定分配)
- 仅支持 MapReduce 计算模型
- YARN 创新:
- 资源管理与作业调度解耦
- 通用资源管理平台
- 支持多种计算框架(Spark, Flink, MPI等)
1.2 设计原则
- 可扩展性:支持 10,000+ 节点集群
- 高可用性:关键组件无单点故障
- 多租户支持:资源隔离与配额管理
- 兼容性:无缝支持 MapReduce 应用
- 灵活性:支持多种计算框架
二、YARN 架构深度解析
2.1 核心组件交互
2.2 组件职责详解
(1) ResourceManager(RM)
- 全局资源协调者:
- 核心模块:
ApplicationsManager
:应用生命周期管理ResourceScheduler
:资源分配决策
- 关键功能:
- 处理客户端请求
- 启动 ApplicationMaster
- 监控节点资源
- 仲裁应用资源请求
(2) NodeManager(NM)
- 节点资源管理者:
- 职责矩阵:
功能 | 描述 |
---|
资源监控 | 跟踪节点CPU/内存使用 |
容器管理 | 启停容器、资源隔离 |
健康检查 | 磁盘健康、节点状态 |
日志管理 | 聚合日志到HDFS |
- 关键机制:
- 定期心跳(默认3秒)
- 容器资源隔离(cgroups/Docker)
(3) ApplicationMaster(AM)
- 应用专属管家:
- 核心职责:
- 资源协商(与RM交互)
- 任务调度(与NM交互)
- 容错处理(任务重试)
- 进度监控
- 框架示例:
- MapReduce:
MRAppMaster
- Spark:
SparkAppMaster
- Flink:
FlinkJobManager
(4) Container
三、YARN 工作机制全流程
3.1 应用提交阶段
3.2 资源申请阶段
3.3 任务执行阶段
3.4 应用完成阶段
四、核心机制深度剖析
4.1 资源调度机制
(1) 调度器比较
特性 | FIFO | Capacity Scheduler | Fair Scheduler |
---|
资源分配 | 先进先出 | 队列资源保证 | 公平分配 |
弹性 | 无 | 队列间借用 | 动态平衡 |
隔离性 | 无 | 队列隔离 | 资源池隔离 |
适用场景 | 测试 | 多租户生产环境 | 混合负载 |
(2) 调度算法流程
4.2 容错机制
(1) 故障类型处理
故障类型 | 检测机制 | 恢复策略 |
---|
AM失败 | RM心跳超时 | 重启AM(最大尝试次数) |
NM失败 | RM心跳超时 | 迁移容器到健康节点 |
容器失败 | AM状态监控 | 重试任务(可配置次数) |
RM失败 | ZK会话超时 | 主备切换(自动故障转移) |
(2) AM容错流程
4.3 资源模型与分配
(1) 资源抽象
public class Resource {
private int memory;
private int vCores;
private Map<String, String> resources;
}
(2) 资源分配策略
- 增量分配:
- 本地性优先:
- 黑名单机制:
五、高级特性解析
5.1 节点标签机制
5.2 资源抢占策略
- 触发条件:
- 执行流程:
- 选择牺牲容器(低优先级/新创建)
- 发送优雅终止信号
- 强制终止(超时不响应)
5.3 容器增强特性
特性 | 描述 | 配置参数 |
---|
Docker容器 | 应用隔离 | yarn.nodemanager.container-executor.class=docker |
GPU支持 | 加速计算 | yarn.resource-types=yarn.io/gpu |
动态资源 | 运行时调整 | yarn.resourcemanager.assign.multiple.enabled=true |
六、性能优化实践
6.1 配置调优指南
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>16384</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>57344</value>
</property>
6.2 最佳实践原则
- AM资源优化:
- 容器大小黄金法则:
- 内存:4-8GB
- vCores:2-4核
- 平衡并行度和调度开销
- 本地性优化:
七、典型应用场景
7.1 混合工作负载支持
7.2 大规模集群案例
公司 | 集群规模 | 工作负载 | YARN特性 |
---|
LinkedIn | 10,000+节点 | 日均百万作业 | 精细队列管理 |
字节跳动 | 50,000+节点 | 混合负载 | 弹性资源池 |
阿里巴巴 | 100,000+节点 | 电商+AI | 定制调度器 |
八、YARN 演进方向
8.1 架构演进
- 统一资源管理:
- 精细化调度:
- 异构计算:
8.2 云原生支持
架构师洞察:
YARN的本质是分布式操作系统的资源管理层,其核心价值在于将硬件资源抽象为统一服务层。
未来将向"资源即服务"(Resource-as-a-Service)演进,成为跨平台、跨硬件的通用资源管理层。
关键挑战在于平衡资源利用率与任务SLA,这需要结合实时监控和智能调度算法。