大数据系列(三)之 Hadoop Yarn 资源调度框架详解

目录

一、为什么要使用资源调度系统Yarn

二、Yarn的主要功能

三、Yarn组件

四、Yarn架构详解

五、Yarn执行工作流程

六、Yarn高可用

小结


一、为什么要使用资源调度系统Yarn

这还要从Hadoop1.0说起,关于Hadoop1.0 的架构这里就不多做介绍了,感兴趣的同学自行了解一下。在Hadoop1.0 中,MR 作业的调度还是有两个重要的组件:JobTracker 和 TaskTracker,随着集群规模增加,单点故障,负载过重,利群利用率低的问题凸显了出来。

Hadoop 2.0 中下一代 MR 框架的基本设计思想就是将 JobTracker 的两个主要功能,资源管理和作业控制(包括作业监控、容错等),分拆成两个独立的进程。资源管理与具体的应用程序无关,它负责整个集群的资源(内存、CPU、磁盘等)管理,而作业控制进程则是直接与应用程序相关的模块,且每个作业控制进程只负责管理一个作业,这样就是 YARN 诞生的背景,它是在 MapReduce 框架上衍生出的一个资源统一的管理平台。

  • 在大数据生态系统中,根据业务场景的不同,有不同的处理系统,比如离线批处理MapReduce实时流计算使用Spark等,不同的计算框架都需要对执行任务进行资源的调度。如果选用每一种框架都搭建一个集群,那么就需要多个专门的人员来维护这些集群系统。
  • 而使用Yarn资源调度共享之后,就可以减少维护成本,少量的人员就可以对多种集群系统进行管理
  • 数据共享:随者数据的暴增,数据如果存储在不同的系统中,当计算的程序和要处理的数据不在同一个集群中,那么就涉及到了跨集群的移动数据,在移动数据的过程中,不仅需要花费很长的时间,而且硬件从成本也会增加。而共享集群模式可以让多种框架共享数据和硬件资源,将大大减少数据移动动带来的成本。
  • 资源的共享:像离线批处理任务一般是在凌晨执行,白天的资源利用率很低,这样就使得资源的使用有明显的波峰和波谷现象;如果是交互式数据分析任务,对资源的使用主要集中在工作日的上班时间段;还有实时流计算,算法模型训练等各种类型的计算任务需要不同的CPU,内存等计算资源。如果能够根据不同类型的计算任务的特点合理的共享集群资源,不但能够减少硬件成本,而且也能够减少资源的利用率。

由于Hadoop的发展,很多公司的数据都存储在了HDFS上,而在Hadoop2.0之前是没有提供统一资源调度系统的,并且只能处理MapReduce任务,其他类型的计算任务需求不能够满足,所以在Haoop2.0的时候推出了Yarn(Yet Another Resource Negotiator)

二、Yarn的主要功能

  • 作为集群的资源管理系统
  • 负责集群的统一管理和调度
  • 与客户端交互,处理客户端的计算任务请求

三、Yarn组件

3.1 ResourceManager(RM)

3.1.1 ResourceManager(RM)介绍

RM 是一个全局的资源管理器,负责整个系统的资源管理和分配,它主要有两个组件构成:

  • 调度器:Scheduler;

  • 应用程序管理器:Applications Manager,ASM。

Scheduler(调度器):

调度器根据容量、队列等限制条件(如某个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。要注意的是,该调度器是一个纯调度器,它不再从事任何与应用程序有关的工作,比如不负责重新启动(因应用程序失败或者硬件故障导致的失败),这些均交由应用程序相关的 ApplicationMaster 完成。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位用一个抽象概念 资源容器(Resource Container,也即 Container),Container 是一个动态资源分配单位,它将内存、CPU、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量。此外,该调度器是一个可插拔的组件,用户可根据自己的需求设计新的调度器,YARN 提供了多种直接可用的调度器,比如 Fair Scheduler 和 Capacity Schedule 等。

Applications Manager应用程序管理器:

应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以 AM、监控 AM 运行状态并在失败时重新启动它等。

3.1.2 ResourceManager(RM)的职责

负责接收客户端提交的计算作业请求,在客户端在执行计算任务的时候会提交到ResourceManager,然后由ResourceManager来调度这些计算任务在集群当中运行。

3.2 NodeManager(NM)

3.2.1 NodeManager(NM)介绍

NodeManager 是每个节点上运行的资源和任务管理器,NodeManager是在集群当中的每一台机器上启动一个NodeManager进程。一般情况下NodeManager会和HDFS中的DataNode是一一对应的,也就是说在启动DataNode的机器上会同时启动一个NodeManager。

3.2.2 NodeManager(NM)的职责

一方面NodeManager负责节点资源的监控和管理,同时节点所提供的资源情况和节点上运行的计算任务的状态都会通过心跳的方式反馈给ResourceManager,周期性的向ResourceManager汇报节点资源情况和计算任务在Container 中的运行情况。

另一方面,它接收并处理来自 AM 的 Container 启动/停止等各种请求。

3.3 ApplicationMaster(AM)

3.3.1 ApplicationMaster(AM)介绍

ApplicationMaster是程序管理器,每一个计算任务程序都会有一个程序管理器ApplicationMaster,负责具体计算任务的资源申请,任务调度和监控。

3.3.2 ApplicationMaster(AM)的职责

  • 与 RM 协商以获取资源(用 container 表示);

  • 将得到的任务进一步分配给内部的任务;

  • 与 NM 通信以启动/停止任务;

  • 监控所有任务的运行状态,当任务有失败时,重新为任务申请资源并重启任务。

MapReduce 就是原生支持 ON YARN 的一种框架,可以在 YARN 上运行 MapReduce 作业。有很多分布式应用都开发了对应的应用程序框架,用于在 YARN 上运行任务,例如 Spark,Storm、Flink 等。

3.4 container

3.4.1 container 介绍

在Yarn 集群中,真正执行任务的是container。

container是内存、CPU、磁盘、网络等机器节点资源抽象出来的一个容器,真正的计算任务是运行在container里面的。

3.4.2 container 的职责

当 AM 向 RM 申请资源时,RM 为 AM 返回的资源便是用 Container 表示的。 YARN 会为每个任务分配一个 Container 且该任务只能使用该 Container 中描述的资源。

四、Yarn架构详解

先来张架构图了解一下

 

Yarn也是采用Master-slave(管理者-工作者)架构,Yarn集群是由全局资源管理器ResourceManager,节点管理器NodeManager组成,一般会启动一个ResourceManager和多个NodeManager。

ResourceManager一般是在单独的机器上启动,Yarn集群的时候启动的一个ResourceManager进程。ResourceManager负责集群资源的统一管理和调度。

为了保证集群的高可用,一般启动两个ResourceManager,一个是Avtive状态,另一个是StandBy状态,当Avtive状态的 ResourceManager 挂掉之后,处于StandBy状态的ResourceManager会切换状态为Active状态,接管整个集群继续提供服务。

五、Yarn执行工作流程

当用户向 YARN 中提交一个应用程序后,YARN 将分两个阶段运行该应用程序:第一个阶段是启动 ApplicationMaster;第二个阶段是由 ApplicationMaster 创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成,如下图所示(此图来自《Hadoop 技术内幕:深入解析 YARN 架构设计与实现原理》):

上图所示的 YARN 工作流程分为以下几个步骤:

1. 客户端向 YARN 提交应用程序,其中包括 ApplicationMaster 程序,启动 ApplicationMaster 命令、用户程序等;

2. RM 为该应用程序分配第一个 Container,并与对应的 NM 通信,要求它在这个 Container 中启动应用程序的 ApplicationMaster;

3. ApplicationMaster 首先向 RM 注册,这样用户可以直接通过 RM 查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,一直重复下面的 4-7 步;

4. ApplicationMaster 采用轮询的方式通过 RPC 协议向 RM 申请和领取资源;

5. 一旦 ApplicationMaster 申请到资源后,便与对应的 NM 通信,要求它启动任务;

6. NM 为任务设置好运行环境(包括环境变量、jar 包等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务;

7. 各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;

8. 应用程序运行完成后,ApplicationMaster 向 RM 注销并关闭自己(当然像 Storm、Flink 这种常驻应用程序列外)。

在任务执行过程中会不断的与ApplicationMaster进行通信,汇报计算任务执行的情况和状态,客户端会通过ResourceManager获取到ApplicationMaster的连接信息,然后客户端Client会与ApplicationMaster进行连接,不断的与ApplicationMaster进行通信,获取计算任务执行的最新的具体信息,直到任务结束。

六、Yarn高可用

YARN 为了实现高可用,需要做容错的地方有以下四个地方:

1. ApplicationMaster 容错:ResourceManager 会和 ApplicationMaster 保持通信,一旦发现 ApplicationMaster 失败或者超时,会为其重新分配资源并重启。重启后 ApplicationMaster 的运行状态需要自己恢复,比如 MRAppMaster 会把相关的状态记录到 HDFS 上,重启后从 HDFS 读取运行状态恢复;

2. NodeManager 容错:NodeManager 如果超时,则 ResourceManager 会认为它失败,将其上的所有 container 标记为失败并通知相应的 ApplicationMaster,由 AM 决定如何处理(可以重新分配任务,可以整个作业失败,重新拉起);

3. container 容错:如果 ApplicationMaster 在一定时间内未启动分配的 container,RM 会将其收回,如果 Container 运行失败,RM 会告诉对应的 AM 由其处理;

4. ResourceManager(RM)容错:RM 采用 HA 机制来实现高可用,即一般在两个不同的节点上启动两个RM,一个作为Active master ,另一个作为StandBy master ,Yarn容错机制如下图所示。Yarn的容错机制和HDFS相似,这里就不再详细阐述了,具体可参考HDFS高可用实现原理

小结

关于Yarn的介绍到这里就结束了,我们需要注意的是Yarn是一个资源调度框架,而不是一个计算框架,计算框架可以运行在yarn上,由Yarn来分配资源以供计算。

 

大数据系列的其他文章:

大数据系列(一)之 ZooKeeper 分布式协调服务

大数据系列(二)之 hdfs 分布式文件系统详解

大数据系列(三)之 Yarn 资源调度框架详解

大数据系列(四)之 MapReduce过程及shuffle详解

大数据系列(五)之 Flume 数据传输

大数据系列(六)之 Spark 分布式计算框架

 


参考文章:

https://matt33.com/2018/09/01/yarn-architecture-learn/

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值