您好,欢迎访问一九零五行业门户网

Yarn概述

yarn是随着hadoop发展而催生的新框架,全称是yet another resource negotiator,可以翻译为“另一个资源管理器”。yarn取代了以前hadoop中jobtracker(后面简写jt)的角色,因为以前jt的任务过重,负责任务的调度、跟踪、失败重启等过程,而且只能运行mapred
yarn是随着hadoop发展而催生的新框架,全称是yet another resource negotiator,可以翻译为“另一个资源管理器”。yarn取代了以前hadoop中jobtracker(后面简写jt)的角色,因为以前jt的任务过重,负责任务的调度、跟踪、失败重启等过程,而且只能运行mapreduce作业,不支持其他编程模式,这也限制了jt使用范围,而yarn应运而生,解决了这两个问题。
为了表述清楚,大家可以先看hadoop版本说明这篇文章,我这里要说的是hadoop2.0,也就是新增了yarn之后的版本。
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的一部分。
与每个应用相关的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 clientrm
上面这个图是client向rm提交任务时的流程。
(1) client通过new application request来通知rm中的asm组建
(2) asm一般会返回一个新生成的全局id,除此之外,传递的信息还有集群的资源状况,这样client就可以在需要时请求资源来运行任务的第一个container即am。
(3) 之后,client就可以构造并发送asc了。asc中包括了调度队列,优先级,用户认证信息,除了这些基本的信息之外,还包括用来启动am的clc信息,一个clc中包括jar包、依赖文件、安全token,以及运行任务过程中需要的其他文件。
经过上面这三步,一个client就完成了一次任务的提交。之后,client可以直接通过rm查询任务的状态,在必要时,可以要求rm杀死这个应用。如下图:
3.2 rmamrm在收到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 amnm
(1) am向container所在机器的nm发送clc来启动container
(2)(3) 在container运行过程中,am可以查询它的运行状态
4. api通过上面的描述,开发者在开发yarn上的应用时主要需要关注以下接口:
applicationclientprotocol
client使用这个协议来与rm通信,来启动一个新应用,检查任务的运行状态或杀死任务
applicationmasterprotocol
am使用这个协议来向rm注册/撤销,请求资源来运行任务。
containermanagementprotocol
am使用这个协议来与nm通信,来启动/停止container,查询container的状态。
5. 总结用户在使用hadoop1.0 api编写的mapreduce可以不用修改直接运行在yarn上,不过随着yarn的发展,向后兼容性还不知道怎么样。不管怎样,新的yarn平台绝对值得我们使用。
yarn是随着hadoop发展而催生的新框架,全称是yet another resource negotiator,可以翻译为“另一个资源管理器”。yarn取代了以前hadoop中jobtracker(后面简写jt)的角色,因为以前jt的任务过重,负责任务的调度、跟踪、失败
原文地址:yarn概述, 感谢原作者分享。
其它类似信息

推荐信息