YARN架构解析:大数据资源管理核心
一、YARN的设计目标
- 解耦资源管理与作业调度:将资源管理(Resource Management)和任务执行(Task Execution)分离,提升集群资源利用率。
- 支持多种计算框架:不再局限于MapReduce,可运行Spark、Flink、Tez等分布式应用。
- 高扩展性:支持数千节点和数万并发任务的超大规模集群。
- 高容错性:自动处理节点故障和任务失败,保障作业可靠性。
二、YARN的核心组件
YARN采用主从架构(Master-Slave),包含以下核心组件:
1. ResourceManager(RM)
- 角色:全局资源管理和调度器,负责协调集群资源分配。
- 主要功能:
- 接收客户端提交的作业请求。
- 监控NodeManager(NM)状态和资源使用情况。
- 通过调度器(Scheduler)分配资源(如CPU、内存)给应用程序。
- 高可用(HA):通过主备RM和ZooKeeper实现故障切换。
2. NodeManager(NM)
- 角色:单个节点上的资源代理,负责管理本节点的资源。
- 主要功能:
- 向RM汇报节点资源状态(如可用CPU、内存)。
- 启动和监控Container(资源容器)。
- 清理Container占用的资源(如任务完成后释放内存)。
3. ApplicationMaster(AM)
- 角色:每个应用程序(如MapReduce作业、Spark作业)的专属协调者。
- 主要功能:
- 向RM申请资源(Container)。
- 与NM通信启动或停止Container。
- 监控任务执行状态并处理失败任务。
4. Container
- 定义:YARN的资源抽象单位,封装了CPU、内存、磁盘、网络等资源。
- 特点:
- 每个任务(如Map任务、Reduce任务)运行在一个Container中。
- 资源分配可动态调整(需框架支持)。
三、YARN的工作流程
以下是一个作业(如MapReduce)在YARN上的执行流程:
-
作业提交
- 客户端将作业(包含JAR包、配置等)提交到ResourceManager。
-
启动ApplicationMaster
- RM为作业分配第一个Container,并在该Container中启动ApplicationMaster(AM)。
-
资源申请
- AM向RM申请运行任务所需的资源(Container列表)。
-
资源分配
- RM根据调度策略(如Capacity Scheduler)分配资源,返回可用的Container列表。
-
任务执行
- AM与NM通信,在分配的Container中启动任务(如Map任务)。
- AM监控任务状态,失败时重新申请资源。
-
作业完成
- 所有任务完成后,AM向RM注销并释放资源。
四、YARN的调度器(Scheduler)
YARN支持多种调度策略,用户可根据需求配置:
1. FIFO Scheduler
- 特点:按作业提交顺序分配资源,简单但资源利用率低。
- 适用场景:小型集群或测试环境。
2. Capacity Scheduler
- 特点:将集群划分为多个队列,每个队列有固定资源配额,队列内使用FIFO。
- 优势:资源隔离性好,适合多租户共享集群。
- 典型使用:Hadoop默认调度器。
3. Fair Scheduler
- 特点:动态平衡资源分配,确保所有作业公平共享资源。
- 优势:适合短期交互式作业(如Spark SQL查询)。
五、YARN的核心特性
- 多租户支持:不同用户或团队共享集群资源,互不干扰。
- 弹性资源分配:Container资源可动态调整(需框架支持)。
- 高容错性:
- ApplicationMaster失败后,RM会重启AM并恢复任务。
- NodeManager故障时,RM将该节点标记为不可用,任务在其他节点重新调度。
- 资源隔离:通过Linux容器(Cgroups)或Docker实现CPU和内存隔离。
六、YARN的配置与优化
1. 关键配置参数
- ResourceManager:
<property><name>yarn.scheduler.minimum-allocation-mb</name><value>1024</value> <!-- 单个Container最小内存 --> </property> <property><name>yarn.scheduler.maximum-allocation-mb</name><value>8192</value> <!-- 单个Container最大内存 --> </property>
- NodeManager:
<property><name>yarn.nodemanager.resource.memory-mb</name><value>16384</value> <!-- 节点总可用内存 --> </property> <property><name>yarn.nodemanager.resource.cpu-vcores</name><value>8</value> <!-- 节点总可用CPU核数 --> </property>
2. 优化建议
- 避免资源碎片:合理设置Container的最小/最大资源。
- 启用资源隔离:使用Cgroups或Docker限制资源使用。
- 监控工具:通过YARN Web UI或工具(如Cloudera Manager、Ambari)监控资源利用率。
七、YARN的适用场景
- 多计算框架混部:同时运行MapReduce、Spark、Flink等作业。
- 长期服务:支持长时间运行的服务(如Apache HBase on YARN)。
- 批处理与交互式查询:适合ETL任务和即席查询(通过资源动态分配)。
八、YARN与MapReducev1的对比
特性 | MapReducev1(旧版) | YARN(Hadoop 2.0+) |
---|---|---|
资源管理 | 由JobTracker集中管理资源与作业 | 资源管理与作业调度分离 |
扩展性 | 最多支持4000节点 | 支持数万节点 |
多计算框架支持 | 仅支持MapReduce | 支持Spark、Flink等多种框架 |
容错性 | JobTracker单点故障 | ResourceManager支持HA |
九、YARN常用命令
# 提交作业到YARN
yarn jar hadoop-mapreduce-examples.jar wordcount /input /output# 查看运行中的作业列表
yarn application -list# 终止作业
yarn application -kill <application_id># 查看节点状态
yarn node -list# 查看队列资源使用情况
yarn queue -status <queue_name>
十、YARN的优缺点
优点 | 缺点 |
---|---|
支持多种计算框架,生态丰富 | 配置复杂,需根据业务调整调度策略 |
资源利用率高,适合共享集群 | 默认资源隔离较弱(需依赖Cgroups/Docker) |
高扩展性和容错性 | 对超低延迟任务支持有限(更适合批处理) |
通过YARN,Hadoop从单一的批处理平台转变为通用的分布式计算资源管理平台,成为大数据生态系统的核心基石。理解YARN的架构和工作原理,是优化集群性能和运行复杂任务的关键。