chapter5 资源管理系统Yarn
Yarn最初就为MapReduce设计的资源管理器。
后逐步成为一个通用的资源管理系统,为上层应用提供统一的资源管理和调度。
1 设计思想
1.1 作业与资源管理
第一代MapReduce架构的缺陷:
- 资源管理和作业管理紧密耦合(都由JobTracker负责)。但资源管理与具体的作业无关。
- 作业的控制管理高度集中。JobTracker负责维护所有作业,内存开销大。
Yarn将资源管理从第一代MapReduce中独立出来,通过资源管理与作业相分离形成通用的资源管理系统,并使作业之间相互独立地控制执行。
1.2 平台与框架
平台 🆚 框架
-
资源管理系统是一个提供资源的
平台
。e.g., Yarn -
运行在资源管理平台上的分布式计算系统称为
框架
。e.g., MapReduce、Spark、Flink
平台提供资源管理的功能,框架是运行在平台上的系统。
Yarn进行资源管理的粒度是应用——Yarn平台的应用
- 框架的应用与Yarn平台的应用不一定一致,框架可将它的应用/作业映射为Yarn平台的应用
- MapReduce将一个作业对应一个Yarn应用;Spark将一个应用对应一个Yarn应用
MapReduce 🆚 Spark:
MapReduce中一个应用就是一个作业 application = Job
Spark中一个应用可由多个作业构成(Job/DAG)
2 体系架构
2.1 架构图
Yarn采用主从架构,包括主节点运行的ResourceManager,从节点运行的NodeManager、提交应用程序的客户端Client。ResourceManager、NodeManager是Yarn的常驻进程。
- ResourceManager(RM):负责整个系统的资源管理和分配
- 资源调度器:分配Container、进行资源调度
- 应用管理器:管理整个系统中运行的所有应用
- NodeManager(NM):负责每个节点的资源和任务管理
- 定期向RM汇报本节点的资源使用情况和Container运行状态
- 接收并处理来自AM的Container自动/停止等各种请求
- ApplicationMaster(AM):每当用户基于Yarn平台提交一个框架应用,Yarn启动一个AM来管理此应用
- 与RM调度器协商获取资源(Container),将获取的资源分配给作业内部的任务
- 与NM通信以启动/停止任务,监控所有任务的运行状态,在任务故障时申请资源重启任务
- Container:可以用于执行应用中具体任务的资源,是资源的抽象表示(动态资源划分单位)

2.2 应用程序执行流程
- 用户向Yarn提交应用程序
- RM接收和处理客户端请求,分配Container,在其中启动AM
- AM向RM注册,将应用解析为作业并分解为若干任务,向RM申请启动任务的资源
- RM向AM分配Container形式表示的资源。AM在多个任务间进行资源分配
- AM确定资源分配方案后,与对应NM通信,在相应Container中启动工作进程执行任务
- 各任务向AM汇报自己的状态和进度
- 任务执行结束,AM释放占用资源,向RM注销并关闭自己

3 工作原理
3.1 单平台多框架
一个资源管理平台Yarn,能运行多个框架,并为多个应用进行资源分配。
通过Yarn,多个框架可部署在同一物理集群上并动态共享资源。

即使是同一类型的应用,也会启动不同的AM,达到应用之间互相独立地控制执行的目的。
如图中两个MapReduce应用
3.2 平台资源分配
ResourceManager的调度器维护了一个或多个应用队列,队列拥有一定资源,同一队列的应用共享队列资源。
Yarn资源分配的对象是应用,队列决定应用资源上限。
资源调度是决定如何将资源分配给队列,以及如何分配给队列中应用的过程。
资源分配策略:
- FIFO:只维护一个队列,队列拥有所有资源,先提交的应用先得到资源
- Capacity:维护层级式队列,资源划分,队列内部分配方式是FIFO
- Fair:维护层级式队列,资源划分,队列可共享资源

4 容错机制
- ResourceManager故障
- 从持久化存储系统中恢复状态信息,所有应用将会重新执行
- 可部署多个RM并通过ZooKeeper协调,保证RM的高可用性
- NodeManager故障
- RM认定MM节点上所有Container运行的任务均执行失败,将失败信息告诉AM
- AM将向RM重新申请资源运行任务
- RM将分配其他节点的Container执行任务
- 若故障NM恢复,它将向RM重新注册,重置本地的状态信息
- RM认定MM节点上所有Container运行的任务均执行失败,将失败信息告诉AM
- ApplicationMaster故障:重启AM
- Container中的任务故障:重启任务
Yarn上层的框架系统的故障恢复由其自身完成,Yarn不管。
Yarn只负责把资源给你重分配。
5 典型示例
5.1 MapReduce2.0框架
MapReduce1.0 🆚 MapReduce2.0(MapReduce+Yarn)

MapReduce2.0:基于Yarn运行MapReduce,资源管理功能由ResourceManager和NodeManager进程负责。
- 客户端提交MapReduce应用(作业)
- Yarn启动MRAppMaster进程负责管理该应用
- MRAppMaster根据Yarn分配的资源进行任务调度,并启动YarnChild进程负责执行Map、Reduce任务
5.2 Yarn平台运行Spark框架
Yarn Cluster:
- 客户端提交Spark应用
- RM随机选取一个NM所在节点启动ApplicationMaster进程,Driver运行在此进程中并由此进程管理该应用
- AM根据Yarn分配的资源进行任务调度,并启动CoarseGrainedExecutorBackend进程执行任务
Driver存在于NodeManager上的某一个ApplicationMaster
Yarn Client:
- 客户端提交Spark应用
- RM随机选取一个NM所在节点启动ExecutorLauncher进程,只负责向RM申请资源启动CoarseGrainedExecutorBackend进程,不负责运行Driver。
Driver和客户端同一个进程
ApplicationMaster:名为ExecutorLauncher,既不管理资源也不管理应用,仅负责资源的申请和释放


5.3 Yarn平台运行MapReduce+Spark框架
Yarn平台可同时运行多种不同的框架,并有Yarn负责统一的资源管理。

图中Spark应用程序以Yarn Cluster模型执行
本文作者:Joey-Wang
本文链接:https://www.cnblogs.com/joey-wang/p/15789700.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步