曾经沧海难为水,除却巫山不是云。|

Joey-Wang

园龄:4年3个月粉丝:17关注:0

chapter5 资源管理系统Yarn

Yarn最初就为MapReduce设计的资源管理器。

后逐步成为一个通用的资源管理系统,为上层应用提供统一的资源管理和调度。

1 设计思想

1.1 作业与资源管理

第一代MapReduce架构的缺陷:

  • 资源管理和作业管理紧密耦合(都由JobTracker负责)。但资源管理与具体的作业无关。
  • 作业的控制管理高度集中。JobTracker负责维护所有作业,内存开销大。

Yarn将资源管理从第一代MapReduce中独立出来,通过资源管理与作业相分离形成通用的资源管理系统,并使作业之间相互独立地控制执行。

1.2 平台与框架

平台 🆚 框架

  1. 资源管理系统是一个提供资源的平台。e.g., Yarn

  2. 运行在资源管理平台上的分布式计算系统称为框架。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的常驻进程。

  1. ResourceManager(RM):负责整个系统的资源管理和分配
    • 资源调度器:分配Container、进行资源调度
    • 应用管理器:管理整个系统中运行的所有应用
  2. NodeManager(NM):负责每个节点的资源和任务管理
    • 定期向RM汇报本节点的资源使用情况和Container运行状态
    • 接收并处理来自AM的Container自动/停止等各种请求
  3. ApplicationMaster(AM):每当用户基于Yarn平台提交一个框架应用,Yarn启动一个AM来管理此应用
    • 与RM调度器协商获取资源(Container),将获取的资源分配给作业内部的任务
    • 与NM通信以启动/停止任务,监控所有任务的运行状态,在任务故障时申请资源重启任务
  4. Container:可以用于执行应用中具体任务的资源,是资源的抽象表示(动态资源划分单位)
image-20211228053845769

2.2 应用程序执行流程

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

3 工作原理

3.1 单平台多框架

一个资源管理平台Yarn,能运行多个框架,并为多个应用进行资源分配。

通过Yarn,多个框架可部署在同一物理集群上并动态共享资源。

image-20211228055707754

即使是同一类型的应用,也会启动不同的AM,达到应用之间互相独立地控制执行的目的。
如图中两个MapReduce应用

3.2 平台资源分配

ResourceManager的调度器维护了一个或多个应用队列,队列拥有一定资源,同一队列的应用共享队列资源。

Yarn资源分配的对象是应用,队列决定应用资源上限。

资源调度是决定如何将资源分配给队列,以及如何分配给队列中应用的过程。

资源分配策略:

  1. FIFO:只维护一个队列,队列拥有所有资源,先提交的应用先得到资源
  2. Capacity:维护层级式队列,资源划分,队列内部分配方式是FIFO
  3. Fair:维护层级式队列,资源划分,队列可共享资源
image-20211228060413103

4 容错机制

  1. ResourceManager故障
    • 从持久化存储系统中恢复状态信息,所有应用将会重新执行
    • 可部署多个RM并通过ZooKeeper协调,保证RM的高可用性
  2. NodeManager故障
    • RM认定MM节点上所有Container运行的任务均执行失败,将失败信息告诉AM
      • AM将向RM重新申请资源运行任务
      • RM将分配其他节点的Container执行任务
    • 若故障NM恢复,它将向RM重新注册,重置本地的状态信息
  3. ApplicationMaster故障:重启AM
  4. Container中的任务故障:重启任务

Yarn上层的框架系统的故障恢复由其自身完成,Yarn不管。
Yarn只负责把资源给你重分配。

5 典型示例

5.1 MapReduce2.0框架

MapReduce1.0 🆚 MapReduce2.0(MapReduce+Yarn)

image-20211228061722008

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,既不管理资源也不管理应用,仅负责资源的申请和释放

image-20211228064701247
image-20211228064920992

5.3 Yarn平台运行MapReduce+Spark框架

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

image-20211228065033010

图中Spark应用程序以Yarn Cluster模型执行

本文作者:Joey-Wang

本文链接:https://www.cnblogs.com/joey-wang/p/15789700.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Joey-Wang  阅读(228)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开