YARN到底是怎么一回事

YARN到底是怎么一回事,第1张

YARN的编程模型

1:保证编程模型的向下兼容性,MRv2重用了MRv1的编程模型和数据处理引擎,但运行环境被重写。

2:编程模型与数据处理引擎

mapreduce应用程序编程接口有两套:新的API(mapred)和旧的API(mapreduce)

采用MRv1旧的API编写的程序可直接运行在MRv2上

采用MRv1新的API编写的程序需要使用MRv2编程库重新编译并修改不兼容的参数 和返回值

3:运行时环境

MRv1:Jobracker和Tasktracker

MRv2:YARN和ApplicationMaster

YARN的组成

yarn主要由ResourceManager,NodeManager,ApplicationMaster和Container等几个组件组成。

ResourceManager(RM)

RM是全局资源管理器,负责整个系统的资源管理和分配。

主要由两个组件组成:调度器和应用 程序管理器(ASM)

调度器

调度器根据容量,队列等限制条件,将系统中的资源分配给各个正在运行的应用程序

不负责具体应用程序的相关工作,比如监控或跟踪状态

不负责重新启动失败任务

资源分配单位用“资源容器”resource Container表示

Container是一个动态资源分配单位,它将内存,CPU,磁盘,网络等资源封装在一起,从而限定每个任务的资源量

调度器是一个可插拔的组件,用户可以自行设计

YARN提供了多种直接可用的调度器,比如fair Scheduler和Capacity Scheduler等。

应用程序管理器

负责管理整个系统中所有应用程序

ApplicationMaster(AM)

用户提交的每个应用程序均包含一个AM

AM的主要功能

与RM调度器协商以获取资源(用Container表示)

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

与NM通信以自动/停止任务

监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务

当前YARN自带了两个AM实现

一个用于演示AM编写方法的实例程序distributedshell

一个用于Mapreduce程序---MRAppMaster

其他的计算框架对应的AM正在开发中,比如spark等。

Nodemanager(NM)和Container

NM是每个节点上的资源和任务管理器

定时向RM汇报本节点上的资源使用情况和各个Container的运行状态

接收并处理来自AM的Container启动/停止等各种要求

Container是YARN中的资源抽象,它封装了某个节点上的多维度资源

YARN会为每个任务分配一个Container,且改任务只能使用该Container中描述的资源

Container不同于MRv1的slot,它是一个动态资源划分单位,是根据应用程序的需求动态产生的

YARN主要由以下几个协议组成

ApplicationClientProtocol

Jobclient通过该RPC协议提交应用才程序,查询应用程序状态等

ResourceManagerAdministrationProtocol

Admin通过该协议更新系统配置文件,比如节点黑名单,用户队列权限等。

ApplicationMasterProtocol

AM通过该RPC协议想RM注册和撤销自己,并为各个任务申请资源

ContainerManagementProtocol

AM通过要求NM启动或者停止Container,获取各个Container的使用状态等信息

ResourceTracker

NM通过该RPC协议向RM注册,并定时发送心跳信息汇报当前节点的资源使用情况和Container运行状况

YARN的工作流程

文字描述一下这个过程:

1:由客户端提交一个应用,由RM的ASM接受应用请求

提交过来的应用程序包括哪些内容:

a:ApplicationMaster

b:启动Applicationmaster的命令

c:本身应用程序的内容

2:提交了三部分内容给RM,然后RM找NodeManager,然后

Nodemanager就启用Applicationmaster,并分配Container

接下来我们就要执行这个任务了,

3:但是执行任务需要资源,所以我们得向RM的ASM申请执行任务的资源(它会在RM这儿注册一下,说我已经启动了,注册了以后就可以通过RM的来管理,我们用户也可以通过RM的web客户端来监控任务的状态)ASM只是负责APplicationMaster的启用

4::我们注册好了后,得申请资源,申请资源是通过第四步,向ResourceScheduler申请的

5:申请并领取资源后,它会找Nodemanager,告诉他我应经申请到了,然后Nodemanager判断一下,

6:知道他申请到了以后就会启动任务,当前启动之前会准备好环境,

7:任务启动以后会跟APplicationmaster进行通信,不断的心跳进行任务的汇报。

8:完成以后会给RM进行汇报,让RSM撤销注册。然后RSM就会回收资源。当然了,我们是分布式的,所以我们不会只跟自己的Nodemanager通信。也会跟其他的节点通信。

1、在程序中,我将文件读入格式设定为WholeFileInputFormat,即不对文件进行切分。2、为了控制reduce的处理过程,map的输出键的格式为组合键格式。与常规的不同,这里变为了,TextPair的格式为。3、为了适应组合键,重新设定了分组函数,即GroupComparator。分组规则为,只要TextPair中的key1相同(不要求key2相同),则数据被分配到一个reduce容器中。这样,当相同key1的数据进入reduce容器后,key2起到了一个数据标识的作用

一、YARN:Hadoop集群中的同一资源调度系统。Hadoop20后引入,主要功能有:负责集群中资源的统一调度,响应客户端的请求。

优缺点

二、YARN核心组件及架构

1 ResourceManger(RM):全局资源管理器,集群中只有一个活跃的RM,具体功能包括:处理客户端的请求;启动监控ApplicationMaster;监控NodeManger;资源的分配和调度。

2ApplicationMaster(AM):每个应用程序(job任务)对应一个AM,负责计算job的资源情况,并向RM申请和任务的调度。具体功能包括:(1)计算job资源使用情况,与RM协商申请job的资源情况;(2)与NodeManger通信启动/停止Container,来执行/终止任务的具体执行;(3)监控任务的运行状态及失败处理。

3NodeManager(NM):节点的资源管理器,每个节点启动一个,一般与DataNode一 一对应。具体功能包括:(1)监控和管理当前节点的资源使用情况;(2)通过心跳向RM汇报自身的资源使用情况;(3)处理RM的请求,分配执行AM的Container;(4):处理AM的请求,启动和停止执行任务的Container。

4Container:资源的抽象,包括一系列描述信息,任务的运行资源(节点、CPU、内存等),任务运行环境,启动命令等。

架构图见 yarn-arch

三、YARN运行流程

2 RM根据内部调度器,选取一个资源空闲的NM,启动一个Container来运行AM。

3AM计算应用程序所需资源,向RM进行资源申请,申请字段包括:

message ResourceRequestProto {  

optional PriorityProtopriority = 1; // 资源优先级  

optional stringresource_name = 2; // 期望资源所在的host  

optional ResourceProtocapability = 3; // 资源量(mem、cpu)  

optional int32num_containers = 4; // 满足条件container个数  

optional boolrelax_locality = 5 ; //default = true;   

}  

AM会根据文件的存储地址,分析运行需要的资源等,向RM申请一个期望的资源列表,RM同时考虑各个节点资源使用情况,最终分配一个资源列表。

4 RM返回资源列表,以cotainer结构

message ContainerProto {  

optional ContainerIdProtoid = 1; //container id  

optional NodeIdProtonodeId = 2; //container(资源)所在节点  

optional stringnode_>

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

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

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

整个的调度流程为:

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

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

处理来自ResourceManager的命令

处理来自ApplicationMaster的命令

每一个应用有一个,负责应用程序的管理

数据切分,申请资源,任务监控,任务容错

对任务环境的抽象

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

Yarn采用的双层调度框架,RM将资源分配给AM,AM再将资源进一步分配给Task,资源不够时会为TASK预留,直到资源充足。在Hadoop10中我们分配资源通过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非常类似与MapReduce10的架构,如上图所示。

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

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

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

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

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

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

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

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

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

以上就是关于YARN到底是怎么一回事全部的内容,包括:YARN到底是怎么一回事、如何通过Java程序提交yarn的MapReduce计算任务、Hadoop生态圈中的调度组件-YARN等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9716903.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存