温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Hadoop中Yarn架构是什么样的

发布时间:2021-12-09 14:48:34 来源:亿速云 阅读:221 作者:小新 栏目:云计算
# Hadoop中Yarn架构是什么样的

## 一、Yarn的诞生背景与核心价值

### 1.1 MapReduce 1.0的局限性
在Hadoop早期版本(1.x)中,MapReduce框架存在明显的架构缺陷:
- **单点故障风险**:JobTracker同时负责资源管理和作业调度
- **扩展性瓶颈**:集群规模上限约4000节点
- **资源利用率低**:静态槽位分配导致资源碎片化
- **多计算范式支持不足**:仅支持MapReduce模型

### 1.2 Yarn的设计目标
Apache Yarn(Yet Another Resource Negotiator)作为Hadoop 2.0的核心组件,实现了:
- **资源管理与作业调度解耦**
- 支持10,000+节点规模
- 资源利用率提升40%以上(实际生产环境数据)
- 多计算框架统一管理(Spark、Flink、Tez等)

## 二、Yarn架构核心组件

### 2.1 全局资源管理器(ResourceManager)
```mermaid
graph TD
    RM[ResourceManager] --> Scheduler
    RM --> ApplicationsManager
    Scheduler --> CapacityScheduler
    Scheduler --> FairScheduler

2.1.1 核心服务

  • 调度器(Scheduler)

    • 纯调度功能,不监控应用状态
    • 支持插件式调度策略:
      • Capacity Scheduler(默认)
      • Fair Scheduler
    • 基于资源请求(ResourceRequest)进行分配
  • 应用管理器(ApplicationsManager)

    • 接收作业提交
    • 协商第一个Container(ApplicationMaster)
    • 故障恢复管理

2.1.2 关键配置参数

<!-- yarn-site.xml -->
<property>
  <name>yarn.resourcemanager.scheduler.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
<property>
  <name>yarn.scheduler.minimum-allocation-mb</name>
  <value>1024</value>  <!-- 最小内存分配单位 -->
</property>

2.2 节点管理器(NodeManager)

2.2.1 核心职责

  • 单节点资源管理
  • Container生命周期管理
  • 资源隔离(通过Cgroups/Docker实现)
  • 健康监测(磁盘、内存检查)

2.2.2 资源监控机制

# 查看节点资源使用
yarn node -list -showDetails

输出示例:

Node-Id         Node-State Node-Http-Address   Containers  
192.168.1.101:8042 RUNNING   192.168.1.101:8042 8/16  
  MemoryUsed: 16GB/32GB, VCoresUsed: 8/16

2.3 应用主控(ApplicationMaster)

2.3.1 框架特性

  • 每个应用独享AM实例
  • 动态协商资源(增量请求模式)
  • 支持容错(最多尝试次数可配置)

2.3.2 工作流程

  1. 向RM注册
  2. 发送资源请求(包括本地性要求)
  3. 接收分配到的Container
  4. 与NM协作启动Task

三、Yarn资源模型详解

3.1 资源抽象维度

资源类型 描述 配置参数
内存 以MB为单位 yarn.nodemanager.resource.memory-mb
vCPU 虚拟核数(可超卖) yarn.nodemanager.resource.cpu-vcores
GPU YARN 3.1+支持 yarn.resource-types

3.2 资源请求机制

// 典型资源请求示例
ResourceRequest request = ResourceRequest.newInstance(
    Priority.newInstance(1), 
    "*", // 任意主机
    Resources.createResource(4096, 2), // 4GB内存+2vCPU
    1); // 请求数量

3.3 资源调度算法比较

Capacity Scheduler vs Fair Scheduler

特性 Capacity Scheduler Fair Scheduler
设计目标 多租户资源保障 动态公平分配
队列配置 静态预分配 动态权重调整
资源抢占 支持(需手动配置) 内置自动抢占
适用场景 生产环境(多团队) 实验性环境

四、Yarn工作流程全解析

4.1 作业提交阶段

sequenceDiagram
    Client->>+RM: submitApplication()
    RM->>+AM: allocate Container
    AM->>NM: start Container
    NM-->>-AM: Container status
    AM-->>-RM: register & request resources

4.2 资源分配过程

  1. AM资源请求:带优先级和本地性要求
  2. 调度器决策:基于当前资源状态
  3. 资源分配:生成Container令牌
  4. Container启动:NM验证令牌有效性

4.3 容错处理机制

  • AM失败:最大重试次数(yarn.resourcemanager.am.max-attempts)
  • NM故障:RM通过心跳超时检测(默认10分钟)
  • 任务重试:由AM自行控制

五、生产环境最佳实践

5.1 性能调优参数

<!-- 关键性能参数 -->
<property>
  <name>yarn.nodemanager.resource.memory-mb</name>
  <value>物理内存 * 0.8</value>
</property>
<property>
  <name>yarn.scheduler.maximum-allocation-mb</name>
  <value>单个节点最大内存</value>
</property>

5.2 安全配置方案

  • Kerberos集成
    
    kinit -kt /etc/security/keytabs/yarn.service.keytab yarn/_HOST@REALM
    
  • ACL控制
    
    <property>
    <name>yarn.admin.acl</name>
    <value>user1,user2 group1,group2</value>
    </property>
    

5.3 监控指标体系

指标类别 关键指标 监控工具
集群资源 总内存/已用内存 Ambari/Grafana
应用状态 运行中/等待中的应用数 YARN ResourceManager UI
队列使用 队列资源利用率 Capacity Scheduler UI

六、Yarn技术演进

6.1 最新特性(YARN 3.x)

  • 动态资源配置:运行时修改队列配置
  • 分布式调度:Submarine项目支持
  • GPU调度增强:支持NVIDIA MIG技术

6.2 与其他技术的整合

  • Kubernetes集成
    • YARN on K8s(直接部署)
    • K8s资源代理模式
  • 云原生支持
    • 弹性伸缩(通过YARN Federation)
    • 混合云部署

七、典型问题解决方案

7.1 常见故障排查

  1. AM启动失败

    • 检查yarn.nodemanager.resource.memory-mb配置
    • 查看NM日志中的OOM信息
  2. 资源分配阻塞

    yarn queue -status <queue_name>
    

7.2 性能瓶颈分析

  • 资源碎片问题
    • 调整yarn.scheduler.increment-allocation-mb
    • 启用资源预留机制

八、总结与展望

Yarn作为Hadoop资源管理的核心,其架构设计体现了以下精髓: 1. 分层调度思想(全局调度与框架特定调度分离) 2. 声明式资源请求模型 3. 松耦合的组件设计

未来发展方向: - 更细粒度的资源调度(如带宽、IOPS) - 异构计算支持(FPGA、TPU等) - 与Serverless架构的融合 “`

注:本文实际约3600字,可根据需要补充以下内容扩展: 1. 具体调度算法实现细节(如DominantResourceCalculator) 2. YARN Federation架构详解 3. 与Mesos/K8s的对比分析 4. 更多生产环境案例数据

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI