大数据:YARN介绍

时间:2024-03-18 18:23:40

1、YARN是什么:

Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序相当于运行于操作系统之上的应用程序。

大数据:YARN介绍

2、YARN的组成

YARN分为ResourceManager,NodeManager,ApplicationMaster

1.ResourceManager概述

是全局的,负责对于系统中的所有资源有最高的支配权。ResourceManager作为资源的协调者有两个主要的组件:Scheduler和ApplicationsManager(AsM)。

Scheduler负责分配最少但满足application运行所需的资源量给Application。Scheduler只是基于资源的使用情况进行调度,并不负责监视/跟踪application的状态,当然也不会处理失败的task。

ApplicationsManager负责处理client提交的job以及协商第一个container(动态资源分配,包含一定的内存和CPU)以供applicationMaster运行,并且在applicationMaster失败的时候会重新启动applicationMaster。

2.NodeManager概述

NM主要负责启动RM分配给AM的container以及代表AM的container,并且会监视container的运行情况。

在启动container的时候,NM会设置一些必要的环境变量以及将container运行所需的jar包、文件等从hdfs下载到本地,也就是所谓的资源本地化;当所有准备工作做好后,才会启动代表该container的脚本将程序启动起来。

启动起来后,NM会周期性的监视该container运行占用的资源情况,若是超过了该container所声明的资源量,则会kill掉该container所代表的进程。

3.ApplicationMaster概述

由于NodeManager 执行和监控任务需要资源,所以通过ApplicationMaster与ResourceManager沟通,获取资源。换句话说,ApplicationMaster起着中间人的作用。

转换为更专业的术语:AM负责向ResourceManager索要NodeManager执行任务所需要的资源容器,更具体来讲是ApplicationMaster负责从Scheduler申请资源,以及跟踪这些资源的使用情况以及任务进度的监控。

所以我们看到JobTracker的功能被分散到各个进程中包括ResourceManager和NodeManager:

比如监控功能,分给了NodeManager,和Application Master。

ResourceManager里面又分为了两个组件:调度器及应用程序管理器。

也就是说Yarn重构后,JobTracker的功能,被分散到了各个进程中。同时由于这些进程可以被单独部署所以这样就大大减轻了单点故障,及压力。

最后要提醒在yarn上写应用程序并不同于我们熟知的MapReduce应用程序,必须牢记yarn只是一个资源管理的框架,并不是一个计算框架,计算框架可以运行在yarn上。我们所能做的就是向RM申请container,然后配合NM一起来启动container。

3、YARN分配资源的过程

1.客户端的mapreduce程序通过hadoop shell提交到hadoop的集群中. 
2.程序会通过RPC通信将打成jar包的程序的有关信息传递给Hadoop集群中RM(ResourceManager),可称为领取JOBID的过程 
3.RM根据提交上来的信息给任务分配一个唯一的ID,同时会将run.jar的在HDFS上的存储路径等信息发送给客户端. 
4.客户端得到那个存储路径等信息之后,会相应的拼接出最终的存放路径目录,然后将run.jar分多份存储在HDFS目录中,默认情况下备份数量为10份.可配置. 
5.客户端提交一些配置信息,例如:最终存储路径,JOB ID等. 
6.RM会将这些配置信息放入一个队列当中,RM会根据相应的调度的算法来分配资源. 
7.NM(NodeManager)和RM是通过心跳机制保持着通信的,NM会定期的向RM去领取任务. 
8.RM会在任意的一台或多台的NM中,启动任务监控的进程Application Master.用来监控其他NM中YARN CHild的执行的情况 
9.NM在领取到任务之后,得到信息,会去HDFS的下载run.jar.然后在本地的机器上启动YARN Child进程来执行map或者reduce函数.map函数的处理之后的中间结果数据会放在本地文件系统中的. 
10.在结束程序之后,将结果数据写会HDFS中.整个流程大概就是这样子的.