Hadoop生态 -- YARN 架构原理与工作机制详解

Hadoop YARN 架构原理与工作机制详解

一、YARN 核心设计思想

1.1 架构演进背景

  • Hadoop 1.0 局限
    • JobTracker 单点故障
    • 资源利用率低(Map/Reduce 槽位固定分配)
    • 仅支持 MapReduce 计算模型
  • YARN 创新
    • 资源管理与作业调度解耦
    • 通用资源管理平台
    • 支持多种计算框架(Spark, Flink, MPI等)

1.2 设计原则

  1. 可扩展性:支持 10,000+ 节点集群
  2. 高可用性:关键组件无单点故障
  3. 多租户支持:资源隔离与配额管理
  4. 兼容性:无缝支持 MapReduce 应用
  5. 灵活性:支持多种计算框架

二、YARN 架构深度解析

2.1 核心组件交互

1. 提交应用
2. 分配容器
3. 启动
4. 注册
5. 资源请求
6. 资源分配
7. 启动容器
8. 执行任务
9. 状态报告
10. 完成注销
Client
ResourceManager
NodeManager
ApplicationMaster
Container

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
  • 资源抽象单元
    // 容器资源定义
    public class Container {
        private ContainerId containerId;
        private NodeId nodeId;
        private Resource resource; // CPU+内存
        private Priority priority;
        private ContainerState state;
    }
    
    • 资源隔离机制:
      • Linux Container(默认)
      • Docker Container
      • Windows Server Container

三、YARN 工作机制全流程

3.1 应用提交阶段

ClientRMSchedulerNMAM1. submitApplication()验证请求并生成ApplicationID2. 存储应用状态到ZK3. 资源请求4. 分配AM容器5. 下载应用JAR包6. 启动ApplicationMasterClientRMSchedulerNMAM

3.2 资源申请阶段

AMRMSchedulerNMContainer1. registerApplicationMaster()2. 资源请求(containers)3. 加入待分配队列4. 调度决策5. 分配容器(AllocateResponse)6. 启动容器(startContainer)7. 执行任务AMRMSchedulerNMContainer

3.3 任务执行阶段

1. 状态报告
2. 任务监控
3. 资源调整
4. 新增容器
5. 启动新任务
Container
AM
RM
NM

3.4 应用完成阶段

AMRMNMClientHistoryServer1. finishApplicationMaster()2. 清理容器3. 更新应用状态4. 返回最终状态5. 归档应用日志AMRMNMClientHistoryServer

四、核心机制深度剖析

4.1 资源调度机制

(1) 调度器比较
特性FIFOCapacity SchedulerFair Scheduler
资源分配先进先出队列资源保证公平分配
弹性队列间借用动态平衡
隔离性队列隔离资源池隔离
适用场景测试多租户生产环境混合负载
(2) 调度算法流程
新资源请求
队列资源可用?
分配容器
有更高优先级?
抢占资源
加入等待队列
通知AM
终止低优先级容器

4.2 容错机制

(1) 故障类型处理
故障类型检测机制恢复策略
AM失败RM心跳超时重启AM(最大尝试次数)
NM失败RM心跳超时迁移容器到健康节点
容器失败AM状态监控重试任务(可配置次数)
RM失败ZK会话超时主备切换(自动故障转移)
(2) AM容错流程
RMZKNMAM1. 检测AM心跳丢失2. 检查应用状态3. 返回持久化状态4. 在新容器重启AM5. 重新注册6. 请求重建容器RMZKNMAM

4.3 资源模型与分配

(1) 资源抽象
public class Resource {
  private int memory; // MB
  private int vCores; // 虚拟核
  private Map<String, String> resources; // 扩展资源(GPU/FPGA)
}
(2) 资源分配策略
  1. 增量分配
    • AM逐步请求资源(避免一次性占用)
  2. 本地性优先
    • 优先级:节点本地 > 机架本地 > 任意节点
  3. 黑名单机制
    • 避免重复分配到故障节点

五、高级特性解析

5.1 节点标签机制

要求GPU
要求大内存
Cluster
GPU节点
高内存节点
普通节点
深度学习应用
内存数据库

5.2 资源抢占策略

  • 触发条件
    • 高优先级任务等待超时
    • 队列资源低于保障阈值
  • 执行流程
    1. 选择牺牲容器(低优先级/新创建)
    2. 发送优雅终止信号
    3. 强制终止(超时不响应)

5.3 容器增强特性

特性描述配置参数
Docker容器应用隔离yarn.nodemanager.container-executor.class=docker
GPU支持加速计算yarn.resource-types=yarn.io/gpu
动态资源运行时调整yarn.resourcemanager.assign.multiple.enabled=true

六、性能优化实践

6.1 配置调优指南

<!-- yarn-site.xml 优化示例 -->
<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> <!-- 预留20%系统内存 -->
</property>

6.2 最佳实践原则

  1. AM资源优化
    • 足够资源防止频繁重启
    • 但不超过总资源5%
  2. 容器大小黄金法则
    • 内存:4-8GB
    • vCores:2-4核
    • 平衡并行度和调度开销
  3. 本地性优化
    • 数据与计算同节点
    • 使用HDFS短路读

七、典型应用场景

7.1 混合工作负载支持

YARN
批处理-MapReduce
交互查询-Tez
流处理-Flink
机器学习-SparkML

7.2 大规模集群案例

公司集群规模工作负载YARN特性
LinkedIn10,000+节点日均百万作业精细队列管理
字节跳动50,000+节点混合负载弹性资源池
阿里巴巴100,000+节点电商+AI定制调度器

八、YARN 演进方向

8.1 架构演进

  1. 统一资源管理
    • 支持Kubernetes集成
    • 跨集群资源共享
  2. 精细化调度
    • 基于AI的预测调度
    • 实时动态调整
  3. 异构计算
    • 量子计算支持
    • 神经形态芯片集成

8.2 云原生支持

YARN
容器化部署
Kubernetes集成
Serverless模式
自动扩缩容

架构师洞察
YARN的本质是分布式操作系统的资源管理层,其核心价值在于将硬件资源抽象为统一服务层。
未来将向"资源即服务"(Resource-as-a-Service)演进,成为跨平台、跨硬件的通用资源管理层。
关键挑战在于平衡资源利用率任务SLA,这需要结合实时监控和智能调度算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值