Apache Hadoop YARN 的架构与运行流程

简介: Apache Hadoop YARN 的架构与运行流程

YARN 概述

Yarn 是一个资源调度平台,负责为运算程序提供服务器计算资源,相当于一个分布式的操作系统平台,而 MapReduce、Spark、Flink 等运行程序则相当于运行于操作系统平台之上的应用程序。

YARN 产生的背景

Yarn 是 Hadoop2.X 版本中的一个新的特性。它的出现其实是为了解决第一代 MapReduce 编程框架的不足,提高集群环境下的资源利用率,这些资源包括了内存、磁盘、网络等等。

Hadoop2.X 版本中重新设计的这个 YARN 集群,具有更好的扩展性,可用性,可靠性,向后兼容性,以 及能支持除 MapReduce 以外的更多分布式计算框架。

在 MapReduce 1.x 时的架构图如下:

14.jpg

从上图可以看到,1.x 时也是 Master/Slave 这种主从结构,在集群上的表现就是一个JobTracker 和多个 TaskTracker。

  • JobTracker:负责资源管理和作业调度
  • TaskTracker:定期向 JobTracker 汇报本节点的健康状况、资源使用情况以及作业执行情况。还可以接收来自JobTracker的命令,例如启动任务或结束任务等。

那么,这种架构会存在哪些问题?

  1. 整个集群中只有一个 JobTracker,存在单点故障。
  2. JobTracker 节点压力大,不但要处理Client 的请求,还得处理 TaskTracker 的心跳等请求。
  3. 由于 JobTracker 是单节点,所以容易成为集群中的瓶颈,不易扩展。
  4. JobTracker 负责的事情太多,基本上所有的事情都需要跟 JobTracker 进行交互。
  5. 1.x 的整个集群只支持MapReduce 任务,不支持其他例如 Spark 的任务。

基于上面的种种原因,Hadoop 在 2.x 中对资源调度进行了剥离,形成了单独的组件,也就是 Yarn 。

YARN 的架构

Yarn 的架构图如下:

15.jpg

YARN 的基本思想是将资源管理和作业调度/监视的功能分解为单独的守护进程。它拥有一个全局 ResourceManager(RM)和每个应用程序 ApplicationMaster(AM)。应用程序可以是单个作业,也可以是作业的DAG(有向无环图,可以理解为对作业相互之间的依赖关系的一种描述)。

ResourceManager

ResourceManager 是基于应用程序对集群资源的需求进行调度的 YARN 集群主控节点,负责 协调和管理整个集群(所有 NodeManager)的资源,响应用户提交的不同类型应用程序的 解析,调度,监控等工作。ResourceManager 会为每一个 Application 启动一个 MRAppMaster, 并且 MRAppMaster 分散在各个 NodeManager 节点  它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(ApplicationsManager, ASM)

ResourceManager 的职责:

  1. 处理客户端请求    
  2. 启动或监控 MRAppMaster    
  3. 监控 NodeManager    
  4. 资源的分配与调度

NodeManager

NodeManager是每台机器框架代理,负责容器(Container)的管理,监视其资源使用情况(CPU,内存,磁盘,网络)并将其报告给 ResourceManager / Scheduler。

NodeManager 的职责:    

  1. 管理单个节点上的资源,开启容器。
  2. 处理来自 ResourceManager 的命令    
  3. 处理来自 MRAppMaster 的命令

ApplicationMaster

每个程序都对应一个 ApplicationMaster,它负责向资源调度器申请执行任务的资源容器,运行任务,监控整个任务的执行,跟踪整个任务的状态,处理任务失败以异常情况。

Container

Container 容器是一个抽象出来的逻辑资源单位。容器是由 ResourceManager Scheduler 服务 动态分配的资源构成,它包括了该节点上的一定量 CPU,内存,磁盘,网络等信息,MapReduce 程序的所有 Task 都是在一个容器里执行完成的,容器的大小是可以动态调整的。

YARN 执行流程

先上图,以 WordCount 的整个运行流程为例:

16.jpg

整个过程如下:

  1. 客户端所在的机器 执行 job.submit() ,调用 YarnRunner 去向 ResourceManager 申请提交一个 application。
  2. ReourceManager 返回 一个 资源提交的地址 hdfs://xxx/.staging/applicationid/  和 applicationid。因为后续的任务需要执行这些个资源文件,到这个阶段,还不了解每个任务到底会分配到哪台机器上,干脆直接给一个都能访问到的地址,任务到谁那里,就自己去这个位置拉取需要的jar 包和 配置信息。
  3. YarnRunner 提交 job 所需要的 资源文件到上面的地址。
  4. YarnRunner 提交资源完毕,向 ResourceManager 申请启动 MrAppMaster。
  5. ResourceManager 收到请求,然后封装成一个 task 放入任务队列,等待 NodeManager 获取执行,此队列默认使用FIFO。
  6. NodeManager1 把这次任务下载到本地。
  7. NodeManager1 下载 job 相关的文件,并在本地地启动一个 Container 运行 MrAppMaster ,container 就是一个容器,利用的是 linux 的 cgroup ,现在市面上的虚拟化技术底层也是使用的此技术。
  8. MrAppMaster 根据配置信息,去跟 ResourceManager 申请运行 maptask 的容器,还是跟第 5 步一样,ReourceManager 拿到后封装成一个task 放到任务队列。
  9. Nodemanager 2 和 3 分别下载 上个步骤的 task 任务 ,然后在本地启动一个  container  容器。
  10. MrAppMaster  向 第9 步新启动的 容器发送 拷贝文件、执行 maptask 等任务的命令。maptask 执行完成后,把数据写到自己本地,容器的工作目录。
  11. MrAppMaster  再向 YARN 请求资源来运行 reducetask 任务。
  12. reducetask 向 map 端获取相应的分区数据进行处理 ,处理完成后进行输出。
  13. 整个 applicetion 执行完成后,MrAppMaster 向 ResourceManager 申请销毁自己。

参考资料

Apache Hadoop YARN http://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/YARN.html

Hadoop学习之路(二十四)YARN的资源调度 https://www.cnblogs.com/qingyunzong/p/8615096.html

分布式资源调度——YARN框架 https://blog.51cto.com/zero01/2091635

相关文章
|
11月前
|
存储 消息中间件 Kafka
Confluent 首席架构师万字剖析 Apache Fluss(一):核心概念
Apache Fluss是由阿里巴巴与Ververica合作开发的Flink表存储引擎,旨在提供低延迟、高效率的实时数据存储与变更日志支持。其采用TabletServer与CoordinatorServer架构,结合RocksDB和列式存储,实现主键表与日志表的统一管理,并通过客户端抽象整合湖仓历史数据,弥补Paimon在实时场景下的性能短板。
1214 23
Confluent 首席架构师万字剖析 Apache Fluss(一):核心概念
|
11月前
|
Dubbo Java 应用服务中间件
Apache ShenYu 架构学习指南
Apache ShenYu 是一款高性能、插件化的微服务API网关,基于Spring WebFlux + Reactor 构建,支持多协议、动态配置与实时数据同步。本指南以通俗类比和实战路径,带你深入理解其架构设计、核心流程与源码实现,助力快速掌握并参与贡献。
1673 12
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
791 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
XML 存储 分布式计算
【赵渝强老师】史上最详细:Hadoop HDFS的体系架构
HDFS(Hadoop分布式文件系统)由三个核心组件构成:NameNode、DataNode和SecondaryNameNode。NameNode负责管理文件系统的命名空间和客户端请求,维护元数据文件fsimage和edits;DataNode存储实际的数据块,默认大小为128MB;SecondaryNameNode定期合并edits日志到fsimage中,但不作为NameNode的热备份。通过这些组件的协同工作,HDFS实现了高效、可靠的大规模数据存储与管理。
1910 70
|
11月前
|
存储 消息中间件 Kafka
Confluent 首席架构师万字剖析 Apache Fluss(三):湖流一体
原文:https://jack-vanlightly.com/blog/2025/9/2/understanding-apache-fluss 作者:Jack Vanlightly 翻译:Wayne Wang@腾讯 译注:Jack Vanlightly 是一位专注于数据系统底层架构的知名技术博主,他的文章以篇幅长、细节丰富而闻名。目前 Jack 就职于 Confluent,担任首席技术架构师,因此这篇 Fluss 深度分析文章,具备一定的客观参考意义。译文拆成了三篇文章,本文是第二篇。
1001 25
Confluent 首席架构师万字剖析 Apache Fluss(三):湖流一体
|
11月前
|
存储 消息中间件 Kafka
Confluent 首席架构师万字剖析 Apache Fluss(二):核心架构
原文:https://jack-vanlightly.com/blog/2025/9/2/understanding-apache-fluss 作者:Jack Vanlightly 翻译:Wayne Wang@腾讯 译注:Jack Vanlightly 是一位专注于数据系统底层架构的知名技术博主,他的文章以篇幅长、细节丰富而闻名。目前 Jack 就职于 Confluent,担任首席技术架构师,因此这篇 Fluss 深度分析文章,具备一定的客观参考意义。译文拆成了三篇文章,本文是第二篇。
1101 20
|
SQL 分布式数据库 Apache
网易游戏 x Apache Doris:湖仓一体架构演进之路
网易游戏 Apache Doris 集群超 20 个 ,总节点数百个,已对接内部 200+ 项目,日均查询量超过 1500 万,总存储数据量 PB 级别。
1369 3
网易游戏 x Apache Doris:湖仓一体架构演进之路
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
存储 消息中间件 人工智能
基于 Apache RocketMQ 的 ApsaraMQ Serverless 架构升级
基于 Apache RocketMQ 的 ApsaraMQ Serverless 架构升级
526 0

推荐镜像

更多