Hadoop生态 -- YARN 详解

Hadoop YARN 详解

一、YARN 架构解析

1.1 核心设计理念

YARN (Yet Another Resource Negotiator) 是 Hadoop 2.0 引入的资源管理平台,解决了 Hadoop 1.0 的以下问题:

  • JobTracker 单点故障问题
  • 资源利用率低(Map/Reduce 插槽固定分配)
  • 仅支持 MapReduce 计算模型

1.2 架构组成

提交应用
分配资源
启动
申请资源
执行任务
资源容器
Client
ResourceManager
NodeManager
ApplicationMaster
Container
核心组件:
组件角色关键功能
ResourceManager (RM)集群资源总管全局资源调度、应用管理
NodeManager (NM)节点代理管理单节点资源、启动容器
ApplicationMaster (AM)应用管家任务调度、容错管理
Container资源抽象封装 CPU+内存+环境

二、ResourceManager 详解

2.1 核心功能模块

ResourceManager
Scheduler
ApplicationsManager
资源分配
应用生命周期管理
AM 故障恢复

2.2 调度器类型

调度器特点适用场景
FIFO Scheduler先进先出测试环境
Capacity Scheduler队列资源隔离多租户生产环境 (默认)
Fair Scheduler公平分配资源混合负载环境

2.3 高可用实现

Active RMZKStandby RMActive定期写入状态监控状态变化Active 失效通知接管服务Active RMZKStandby RMActive

三、NodeManager 工作机制

3.1 核心功能

NodeManager
资源监控
容器管理
日志管理
健康检查

3.2 关键配置参数

<!-- yarn-site.xml -->
<property>
  <name>yarn.nodemanager.resource.memory-mb</name>
  <value>16384</value> <!-- 16GB 可用内存 -->
</property>
<property>
  <name>yarn.nodemanager.resource.cpu-vcores</name>
  <value>8</value> <!-- 8个虚拟核心 -->
</property>

四、ApplicationMaster 深度解析

4.1 AM 生命周期

ClientRMNMAMTask提交应用分配AM容器启动AM进程注册应用申请资源分配容器启动任务容器状态检查loop[任务监控]完成注销ClientRMNMAMTask

4.2 AM 类型示例

计算框架AM 实现特点
MapReduceMRAppMaster支持Map/Reduce任务
SparkSparkAppMasterDAG任务调度
FlinkFlinkJobManager流处理优化

五、YARN 工作流程详解

5.1 应用提交完整流程

ClientRMNMAMTask1. submitApplication()2. 分配AM容器3. 启动ApplicationMaster4. registerApplicationMaster()5. 请求资源(Container)6. 分配Container7. 启动Container8. 执行任务9. 报告状态10. 完成应用ClientRMNMAMTask

5.2 资源申请模型

// AM 资源申请示例
Resource capability = Resource.newInstance(2048, 2); // 2GB内存 + 2vcores
ContainerRequest request = new ContainerRequest(
    capability, null, null, Priority.newInstance(1));
amRMClient.addContainerRequest(request);

六、YARN 高级特性

6.1 资源调度优化

技术描述优势
节点标签节点分组标记精细化资源分配
资源抢占回收超额资源保证高优先级任务
计划调度预约资源满足SLA要求

6.2 容器增强特性

基础容器
GPU容器
Docker容器
特权容器

6.3 日志聚合机制

推送日志
通过RM API
yarn logs
NM
HDFS
Client
User
WebUI

七、YARN 命令与监控

7.1 常用命令

# 提交应用
yarn jar <jar_path> <main_class> [args]

# 查看应用列表
yarn application -list

# 查看应用日志
yarn logs -applicationId <app_id>

# 终止应用
yarn application -kill <app_id>

# 查看节点状态
yarn node -list -all

7.2 监控指标

指标类型关键指标监控工具
集群资源总内存/CPU使用率Grafana + Prometheus
应用状态运行/等待应用数YARN ResourceManager UI
节点健康心跳丢失节点Ambari / Cloudera Manager

八、配置优化指南

8.1 内存配置公式

最大容器内存 = min (yarn.scheduler.maximum-allocation-mb, 
                yarn.nodemanager.resource.memory-mb)
                
推荐容器大小 = 集群内存总量 / 并发容器数

8.2 核心配置参数

<!-- yarn-site.xml 优化示例 -->
<property>
  <name>yarn.scheduler.minimum-allocation-mb</name>
  <value>1024</value> <!-- 最小容器内存 -->
</property>
<property>
  <name>yarn.scheduler.maximum-allocation-mb</name>
  <value>8192</value> <!-- 最大容器内存 -->
</property>
<property>
  <name>yarn.nodemanager.vmem-check-enabled</name>
  <value>false</value> <!-- 关闭虚拟内存检查 -->
</property>

九、故障排查与调试

9.1 常见问题排查

问题现象排查方向解决措施
应用卡在ACCEPTED资源不足增加资源或调整队列
AM频繁重启AM资源不足增大AM容器资源
容器启动失败端口冲突检查yarn.nodemanager.local-dirs
节点状态异常健康检查失败查看NM日志

9.2 调试技巧

# 启用调试日志
export YARN_ROOT_LOGGER=DEBUG,console

# 查看容器环境
yarn container -signal <container_id> -output_thread_dump

十、YARN 应用场景

10.1 多计算框架支持

YARN
MapReduce
Spark
Flink
Tez
MPI

10.2 典型应用模式

模式描述案例
批处理小时/天级任务日志分析
交互查询亚秒级响应Hive LLAP
流处理持续数据处理Flink实时风控
机器学习迭代计算TensorFlow分布式训练

十一、最佳实践总结

  1. 队列规划:按业务划分资源队列,使用Capacity Scheduler

    <property>
      <name>yarn.scheduler.capacity.root.queues</name>
      <value>prod,dev,test</value>
    </property>
    
  2. 资源隔离:启用Linux容器执行器

    <property>
      <name>yarn.nodemanager.container-executor.class</name>
      <value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value>
    </property>
    
  3. 监控告警:设置关键指标阈值

    • 集群资源利用率 > 85%
    • 待处理应用 > 10
    • 节点不可用率 > 5%
  4. 滚动升级:使用YARN REST API平滑升级

    yarn rmadmin -transitionToActive --forcemanual rm2
    

性能优化箴言
“YARN配置的艺术在于平衡 - 容器大小要足够大以减少开销,又要足够小以实现并行最大化。”
推荐容器大小:内存4-8GB,vcores 2-4个,根据实际负载微调。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值