Yarn资源调度过程详细

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yarn资源调度过程详细相关的知识,希望对你有一定的参考价值。

参考技术A 在MapReduce1.0中,我们都知道也存在和HDFS一样的单点故障问题,主要是JobTracker既负责资源管理,又负责任务分配。

Yarn中可以添加多种计算框架,Hadoop,Spark,MapReduce,不同的计算框架在处理不同的任务时,资源利用率可能处于互补阶段,有利于提高整个集群的资源利用率。

同时Yarn提供了一种共享集群的模式,随着数据量的暴增,跨集群间的数据移动,需要花费更长的时间,且硬件成本会增大,共享集群模式可以让多种框架共享数据和硬件资源。

整个的调度流程为:

整个集群只有一个,负责集群资源的统一管理和调度

整个集群存在多个,负责单节点资源管理与使用

处理来自ResourceManager的命令
处理来自ApplicationMaster的命令

每一个应用有一个,负责应用程序的管理
数据切分,申请资源,任务监控,任务容错

对任务环境的抽象

ResourceManager存在单点故障,基于Zookeeper实现HA,通常任务失败后,RM将失败的任务告诉AM,RM负责任务的重启,AM来决定如何处理失败的任务。RMAppMaster会保存已经运行完成的Task,重启后无需重新运行。

Yarn采用的双层调度框架,RM将资源分配给AM,AM再将资源进一步分配给Task,资源不够时会为TASK预留,直到资源充足。在Hadoop1.0中我们分配资源通过slot实现,但是在Yarn中,直接分配资源。

资源调度器有:FIFO,Fair scheduler,Capacity scheduler

Yarn支持CPU和内存两种资源隔离,内存时决定生死的资源,CPU时影响快满的资源,内存隔离采用的是基于线程监控和基于Cgroup的方案。

Tez俗称DAG计算,多个计算作业之间存在依赖关系,并形成一个依赖关系的有向图。
Tez是运行在Yarn上的DAG,动态的生成计算的关系流。

如上图左所示的Top K问题,第一个Mapreduce实现wordcount的功能,第二个Mapreduce只用使用Reduce实现排序的问题,但是在Mapreduce中必须创建两个MapReduce任务,但是在Tez优化后,可以直接再第一个reduce后,不进行输出,直接输出到第二个reduce中,优化了Mapreduce.

上图中右为一个HiveQL实现的MapReduce,mapreduce为其创建了4个mapreduce任务,使用Tez可以只使用一个Mapreduce任务。

Tez on Yarn和,mapreduce on Yarn上的作业的流程基本一样。

产生一个Mapreduce任务就提交,影响任务的效率,Tez的优化策略是创建一个ApplicationMaster的缓存池,作业提交到AMppplserver中,预先启动若干ApplicationMaster形成AM缓冲池。

同时ApplicationMaster启动的时候也可以预先启动几个container,做为容器的缓冲池。

此外ApplicationMaster运行完成后,不会马上注销其下的container,而是将其预先分配给正要运行的任务。

Tez的好处就是避免产生较多的Mapreduce任务,产生不必要的网络和磁盘IO.

Strom是实时处理永不停止的任务,像流水一样不断的处理任务。

Strom非常类似与MapReduce1.0的架构,如上图所示。

但是其任务的调度的流程与Mapreduce的不一样。

主要的区别是Strom client可以直接操作 Strom ApplicationMaster

spark克服了MapReduce在迭代式计算和交互式计算方面的不足。

spark中引入了RDD,可以并行计算的数据集合,能够被缓存到能存和硬盘中。

spark on Yarn 和MapReduce on Yarn 基本上类似

MR运行需要进行任务管理和资源管理调度,Yarn只是负责资源管理调度。Mapreduce只是运行在Yarn上的应用。

MapReduce2.0包括Yarn 和MRMapreduce,所以说Yarn是从MapReudce中独立出来的一个模块。但是现在Yarn已经成为多种计算框架的资源管理器。

MapReduce1.0是可以直接运行的linux系统上的,因为其自带了JobTracker服务和TaskTracker服务,它们可以自己进行资源管理与任务的分配。

MapReduce2.0中mapreduce是只有任务管理,所以其必须运行在Yarn上进行资源的调度。

YARN资源调度框架

Yarn资源调度系统

一、课前准备

1. 三个节点的hadoop集群

二、课堂主题

1. yarn架构、核心组件

2. yarn应用提交过程

3. yarn的调度策略

4. yarn的优化

三、课堂目标

1. 数据yarn资源的任务调度原理

2. 熟练对yarn集群进行维护

3. 了解如何使用YARN的可扩展性、效率和灵活性来增加集群性能

四、知识要点

1. yarn介绍

技术图片

   Apache Hadoop YARN是apache Software Foundation Hadoop的子项目,为分离Hadoop2.0资源管理和

计算组件而引入。YARN的诞生源于HDFS的数据需要更多的交互模式,不单单是MapReduce模式。Hadoop2.0

的YARN架构提供了更多的处理框架,不再强迫使用MapReduce框架。

 技术图片

 当企业的数据在HDFS中是最可用的,有多钟数据处理方式是非常重要的。有了Hadoop2.0和YARN,机构可以采用流处理

互动数据处理方式以及其他的基于Hadoop的应用程序。

2. yarn架构

 YARN还是经典的主从(master/slave)架构,如下图。大体上看,YARN服务由一个ResourceManager(RM)

和多个NodeManager(NM)构成,ResourceManager为主节点(master),NodeManager为从节点(slave)。

技术图片

 

 

 ApplicationMaster可以在容器内运行任何类型的任务。例如,MapReduceApplicationMaster请求容器启动map

或reduce任务,而Giraph ApplicationMaster请求容器运行Giraph任务。

 

 

 

 

3. yarn应用运行原理

YARN是如何工作的?YARN的基本理念是将JobTracker/TaskTracker两大职能分割为以下几个实体:

  1. 一个全局的资源管理ResourceManager

  2. 每个应用程序一个ApplicationMaster

  3. 每个从节点一个NodeManager

  4. 每个应用程序一个运行在NodeManager上的Container

  ResourceManager和NodeManager组成了一个新的、通用的、用分布式管理应用程序的系统。

ResourceManager对系统中的应用程序资源有终极仲裁的权限。ApplicationMaster是一个特定于框架的实体,

它的责任是同ResourceManager谈判资源,同时为NodeManager(S)执行和监控组件任务。ResourceManager有一个

调度器,根据不同的约束条件,例如队列容量、用户限制等,将资源进行分配给各类运行着的应用程序。调度器执行的

调度功能是基于应用程序的资源申请。NodeManager负责发布应用程序容器,监控资源的使用并向ResourceManager进行汇报。

每个ApplicationMaster都有职责从调度器那谈判得到适当的资源容器,追踪它们的状态,并监控他们的进程。从系统

的视图看,ApplicationMaster作为一个普通的容器运行着。

3.1 yarn应用提交过程

Application在Yarn中的执行过程,整个执行过程可以总结为三步:

1. 应用程序提交

2. 启动应用的ApplicationMaster实例

3. ApplicationMaster实例管理应用程序的执行

具体提交过程为:

1. 客户端程序向ResourceManager提交应用并请求一个ApplicationMaster实例;

2. ResourceManager找到一个可以运行一个Container的NodeManager,并在这个Container中启动ApplicationMaster实例;

3.  ApplicationMaster向ResourceManager进行注册,注册之后客户端就可以查询ResourceManager获得自己ApplicationMaster

的详细信息,以后就可以和自己的ApplicationMaster直接交互了(这个时候,客户端主动和ApplicationMaster交流,

应先向ApplicationMaster发送一个满足自己需求的资源请求);

4. 在平常的操作过程中,ApplicationMaster根据resource-request协议向ResourceManager发送resource-request请求;

5. 当Container被成功分配后,ApplicationMaster通过向NodeManager发送container-launch-specification信息来启动

Container,Container-launch-specification信息包含了能够让Container和ApplicationMaster交流所需要的资料;

6. 应用程序的代码以task形式在启动的Container中运行,并把运行的进度、状态等信息通过application-specific

协议发送给ApplicationMaster;

7. 在应用程序运行期间,提交应用的客户端主动和ApplicationMaster交流获得应用的运行状态,进度更新等信息,

交流协议也是application-specific协议;

8. 一旦应用程序执行完成并且所有相关工作也以及完成,ApplicationMaster向ResourceManager取消注册然后关闭,

用到所有的Container也归还系统;

精简版:步骤1:用户将应用程序提交到ResourceManager上;步骤2:ResourceManager为应用程序ApplicationMaster申请资源

并与某个NodeManager通信启动第一个Container,以启动ApplicationMaster;

步骤3:ApplicationMaster与ResourceManager注册进行通信,为内部要执行的任务申请资源,一旦得到资源后,

将于NodeManager通信,以启动对应的Task;步骤4:所有任务运行完成后,ApplicationMaster向ResourceManager注销,

整个应用程序运行结束。

3.2 MapReduce on yarn

MapReduce基于yarn的工作原理:我们通过提交jar包,进行MapReduce处理,那么这个那个运行过程分为五个环节:

1、向client端提交MapReduce job

2、随后yarn的ResourceManager进行资源的分配

3、由NodeManager进行加载与监控Containers

4、通过applicationMaster与ResourceManager进行资源的申请及状态的交互,由NodeManager进行

MapReduce运行时job的管理

5、通过hdfs进行job配置文件、jar包的各节点分发

 

Job初始化过程

1、当resourceManager收到了submitApplication()方法的调用通知后,Scheduler开始分配container,

随之ResourceManager发送applicationMaster进行,告知每个NodeManager管理器

2、由ApplicationMaster决定如何运行tasks,如果job数据量比较小,ApplicationMaster便选择将task运行在一个JVM

中。那么如何判断这个job是大是小呢?当一个job的mappers数量小于10个,只有一个reducer或者读取的文件大小要

小于HDFS block时,(可通过修改配置项

mapreduce.job.ubertask.maxmaps

mapreduce.job.ubertask.maxreduce以及

mapreduce.job.ubertask.maxbytes进行调整)

3、在运行task之前,applicationMaster将会调用setupJob()方法,随之创建output的输出路径(这就能够

解释,不管你的mapreduce一开始是否报错,输出路径都会创建)

Task任务分配

1、接下来applicationMaster向ResourceManager请求containers用于执行map与reduce的tasks(set 8),

这里map task的优先级要高于reduce task,当所有的map tasks执行了百分之五的时候,将会请求

reduce,具体下面再总结 

2、 运行tasks的是需要消耗内存与CPU资源的,默认情况下,map和reduce的task资源分配为

1024M与一个核,(可修改运行的最小与最大参数配置,

mapreduce.map.memory.mb,

mapreduce.reduce.memory.mb,

mapreduce.map.cpu.vcores,

mapreduce.reduce.cpu.vcores)

Task任务执行

1、这时一个task已经被ResourceManager分配到一个container中,由applicationMaster告知nodemanager

启动container,这个task将会被一个主函数为YarnChild的java application运行,但在运行task之前,

首先定位task需要的jar包、配置文件以及加载在缓存中的文件。

2、YarnChild运行与一个专属的JVM中,所以任何一个map或reduce任务出现问题,都不会影响整个nodemanager的

crash或者hang。

3、每个task都可以在相同的JVM task中完成,随之将完成的处理数据写入临时文件中

 

MapReduce数据流进行进度与状态更新

1、MapReduce是一个较长运行时间的批处理过程,可以是一小时、几小时甚至几天,那么Job的运行状态监控

就非常重要。每个job的运行状态监控就非常重要。每个job以及每个task都有一个包含job

(running,successfully completed,tailed)的状态,以及value的计数器,状态信息及描述信息

(描述信息一般都是在代码中加的打印信息),那么,这些信息是如何与客户端进行通信的呢?

2、当一个task开始执行,它将会保持运行记录,记录task完成的比例,对于map的任务,将会记录其运行的

百分比,对于reduce来说可能复杂点,但系统依旧会估计reduce的完成比例,当一个map或reduce任务执行时,

子进程会持续每三秒钟与applicationMaster进行交互。Job完成

3.3 yarn应用生命周期

RM:Resource Manager

AM:Application Master

NM:Node Manager

1. Client向RM提交应用,包括AM程序及启动AM的命令

2. RM为AM分配宇哥容器,并与对应的NM通信,令其在容器上启动应用的AM

3. AM启动时向RM注册,允许Client向RM获取AM信息然后直接和AM通信

4. AM通过资源请求协议,为应用协商容器资源

5. 如容器分配成功,AM要求NM在容器中启动应用,应用启动后可以和AM独立通信

6. 应用程序在容器中执行,并向AM汇报

7. 在应用执行期间,Client和AM通信获取应用状态

8. 应用执行完成,AM向RM注销并关闭,释放资源。

申请资源=》启动appmaster=》申请宁运行任务的container=》分发task=》运行task=》task结束=》回收和container

  

4. 如何使用yarn

 

5. yarn调度器

 

未完成 01:05:34,今天脑子不在状态,就到这了,去过一遍hive了,拜拜了您嘞

 

以上是关于Yarn资源调度过程详细的主要内容,如果未能解决你的问题,请参考以下文章

[Hadoop]-Yarn-调度器篇

大数据技术之Hadoop(Yarn)资源调度器案例实操

大数据技术之Hadoop(Yarn)资源调度器案例实操

YARN中的资源调度

yarn三种调度器(资源调度策略或机制)

分布式集群资源调度框架 Yarn