[转]Hadoop YARN任务提交流程

Yarn是随着hadoop发展而催生的新框架,全称是Yet Another Resource Negotiator,能够翻译为“另外一个资源管理器”。yarn取代了之前hadoop中jobtracker(后面简写JT)的角色,由于之前JT的 任务太重,负责任务的调度、跟踪、失败重启等过程,并且只能运行mapreduce做业,不支持其余编程模式,这也限制了JT使用范围,而yarn应运而 生,解决了这两个问题。html

为了表述清楚,你们能够先看hadoop版本说明这篇文章,我这里要说的是hadoop2.0,也就是新增了yarn以后的版本。apache

1. Yarn(或称MRv2)

Yarn把jobtracker的任务分解开来,分为:编程

  • ResourceManager(简写RM)负责管理分配全局资源
  • ApplicationMaster(简写AM),AM与每一个具体任务对应,负责管理任务的整个生命周期内的全部事宜

除了上面两个之外,tasktracker被NodeManager(简写NM)替代,RM与NM构成了集群的计算平台。这种设计容许NM上长期运 行一些辅助服务,这些辅助服务通常都是应用相关的,经过配置项指定,在NM启动时加载。例如在yarn上运行mapreduce程序时,shuffle就 是一个由NM加载起来的辅助服务。须要注意的是,在hadoop 0.23以前的版本,shuffle是tasktracker的一部分。api

与每一个应用相关的AM是一个框架类库,它与RM沟通协商如何分配资源,与NM协同执行而且监测应用的执行状况。在yarn的设计 中,mapreduce只是一种编程模式,yarn还容许像MPI(message passing interface),Spark等应用构架部署在yarn上运行。安全

2. Yarn设计


上图是一个典型的YARN集群。能够看到RM有两个主要服务:网络

  • 可插拔的Scheduler,只负责用户提交任务的调度
  • ApplicationsMaster的(简写AsM)负责管理集群中每一个任务的ApplicationMaster(简写AM),负责任务的监控、失败重起等

在hadoop1.0时,资源分配的单位是slot,再具体分为map的slot与reduce的slot,并且这些slot的个数是在任务运行前 事先定义的,在任务运行过程当中不能改变,很明显,这会形成资源的分配不均问题。在haodop2.0中,yarn采用了container的概念来分配资 源。每一个container由一些能够动态改变的属性组成,到如今为止,仅支持内存、cpu两种。可是yarn的这种资源管理方式是通用的,社区之后会加 入更多的属性,好比网络带宽,本地硬盘大小等等。并发

3. Yarn主要组件

在这小节里,主要介绍yarn各个组件,以及他们之间是如何通讯的。框架

3.1 Client<—>RM

上面这个图是Client向RM提交任务时的流程。
(1) Client经过New Application Request来通知RM中的AsM组建
(2) AsM通常会返回一个新生成的全局ID,除此以外,传递的信息还有集群的资源情况,这样Client就能够在须要时请求资源来运行任务的第一个container即AM。
(3) 以后,Client就能够构造并发送ASC了。ASC中包括了调度队列,优先级,用户认证信息,除了这些基本的信息以外,还包括用来启动AM的CLC信息,一个CLC中包括jar包、依赖文件、安全token,以及运行任务过程当中须要的其余文件。oop

通过上面这三步,一个Client就完成了一次任务的提交。以后,Client能够直接经过RM查询任务的状态,在必要时,能够要求RM杀死这个应用。以下图:
.net

3.2 RM<—>AM

RM在收到Client端发送的ASC后,它会查询是否有知足其资源要求的container来运行AM,找到后,RM会与那个container所在机器上的NM通讯,来启动AM。下面这个图描述了这其中的细节。

(1) AM向RM注册,这个过程包括handshaking过程,而且传递一些信息,包括AM监听的RPC端口、用于监测任务运行状态的URL等。
(2) RM中的Scheduler部件作回应。这个过程会传递AM所需的信息,好比这个集群的最大与最小资源使用状况等。AM利用这些信息来计算并请求任务所需的资源。
(3) 这个过程是AM向RM请求资源。传递的信息主要包含请求container的列表,还有可能包含这个AM已经释放的container的列表。
(4) 在AM通过(3)请求资源以后,在稍微晚些时候,会把心跳包与任务进度信息发送给RM
(5) Scheduler在收到AM的资源请求后,会根据调度策略,来分配container以知足AM的请求。
(6) 在任务完成后,AM会给RM发送一个结束消息,而后退出。

在上面(5)与(6)之间,AM在收到RM返回的container列表后,会与每一个container所在机器的NM通讯,来启动这个container,下面就说说这个过程。

3.2 AM<—>NM


(1) AM向container所在机器的NM发送CLC来启动container
(2)(3) 在container运行过程当中,AM能够查询它的运行状态

4. API

经过上面的描述,开发者在开发YARN上的应用时主要须要关注如下接口:

5. 总结

用户在使用hadoop1.0 API编写的MapReduce能够不用修改直接运行在yarn上,不过随着yarn的发展,向后兼容性还不知道怎么样。无论怎样,新的yarn平台绝对值得咱们使用。

原文

相关文章
相关标签/搜索