这一篇博文是【大数据技术●降龙十八掌】系列文章的其中一篇,点击查看目录:大数据技术●降龙十八掌
-
系列文章:
-
【十八掌●内功篇】第六掌:YARN之架构和原理
【十八掌●内功篇】第六掌:YARN之ResourceManager
【十八掌●内功篇】第六掌:YARN之NodeManager
【十八掌●内功篇】第六掌:YARN之ApplicationMaster
【十八掌●内功篇】第六掌:YARN之YARN资源调度器
一、 YARN简介
YARN是Hadoop2引入的通用的资源管理和任务调度的平台,可以在YARN上运行MapReduce、Tez、Spark等多种计算框架,只要计算框架实现了YARN所定义的接口,都可以运行在这套通用的Hadoop资源管理和任务调度平台上。
1、 YARN产生的背景
Hadoop 1.0是由HDFS和MapReduce V1组成的,YARN出现之前是MapReduce V1来负责资源管理和任务调度,MapReduce V1由JobTracker和TaskTracker两部分组成。
MapReduce V1有如下缺点:
-
(1) 扩展性差
- 在MapReduce V1中,JobTracker同时负责资源管理和任务调度,而JobTracker只有一个节点,所以JobTracker成为了制约系统性能的一个瓶颈,制约了Hadoop平台的扩展性。 (2) 可靠性低
- MapReduce V1中JobTracker存在单点故障问题,所以可靠性低。 (3) 资源利用率低
-
MapReduce V1采用了基于槽位的资源分配模型,槽位是一种粗粒度的资源划分单位。
一是通常情况下为一个job分配的槽位不会被全部利用。
二是一个MapReduce任务的Map阶段和Reduce阶段会划分了固定的槽位,并且不可以共用,很多时候一种类型的槽位资源很紧张而另外一种类型的槽位很空闲,导致资源利用率低。
(4) 不支持多种计算框架
- MapReduce V1这种资源管理和任务调度方式只适合MapReduce这种计算框架,而MapReduce这种离线计算框架很多时候不能满足应用需求。
2、 YARN的优点
-
(1) 支持多种计算框架
- YARN是通用的资源管理和任务调度平台,只要实现了YARN的接口的计算框架都可以运行在YARN上 (2) 资源利用率高
- 多种计算框架可以共用一套集群资源,让资源充分利用起来,提高了利用率。 (3) 运维成本低
- 避免一个框架一个集群的模式,YARN降低了集群的运维成本。 (4) 数据可共享
- 共享集群模式可以让多种框架共享数据和硬件资源,减少数据移动带来的成本
3、 Hadoop1.0和Hadoop2.0的差别
-
(1) 组成部分
- Hadoop1.0由HDFS和MapReduce组成,Hadoop2.0由HDFS和YARN组成。 (2) HDFS可扩展性
- Hadoop1.0中的HDFS只有一个NameNode,制约着集群文件个数的增长,Hadoop2.0增加了HDFS联盟的架构,可以将NameNode所管理的NameSpace水平划分,增加了HDFS的可扩展性。 (3) HDFS的可靠性
- Hadoop1.0中的HDFS只有一个NameNode,存在着单点故障的问题,Hadoop2.0提供了HA的架构,可以实现NameNode的热备份和热故障转移,提高了HDFS的可靠性。 (4) 可支持的计算框架
- Hadoop1.0中只支持MapReduce一种计算框架,Hadoop2.0因为引入的YARN这个通用的资源管理与任务调度平台,可以支持很多计算框架了。 (5) 资源管理和任务调度
-
Hadoop1.0中资源管理和任务调度依赖于MapReduce中的JobTracker,JobTracker工作很繁重,很多时候会制约集群的性能。
Hadoop2.0中将资源管理任务分给了YARN的ResourceManage,将任务调度分给了YARN的ApplicationMaster。
二、 YARN的架构和工作原理
YARN的基本设计思想是将MapReduce V1中的JobTracker拆分为两个独立的服务:ResourceManager和ApplicationMaster。ResourceManager负责整个系统的资源管理和分配,ApplicationMaster负责单个应用程序的的管理。
1、 架构图
-
(1) ResourceManager
-
RM是一个全局的资源管理器,负责整个系统的资源管理和分配,它主要由两个部分组成:调度器(Scheduler)和应用程序管理器(Application Manager)。
调度器根据容量、队列等限制条件,将系统中的资源分配给正在运行的应用程序,在保证容量、公平性和服务等级的前提下,优化集群资源利用率,让所有的资源都被充分利用
应用程序管理器负责管理整个系统中的所有的应用程序,包括应用程序的提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重启它。
(2) ApplicationMaster
-
用户提交的一个应用程序会对应于一个ApplicationMaster,它的主要功能有:
a.与RM调度器协商以获得资源,资源以Container表示。
b.将得到的任务进一步分配给内部的任务。
c.与NM通信以启动/停止任务。
d.监控所有的内部任务状态,并在任务运行失败的时候重新为任务申请资源以重启任务。
(3) NodeManager
- NodeManager是每个节点上的资源和任务管理器,一方面,它会定期地向RM汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,他接收并处理来自AM的Container启动和停止请求。 (4) Container
-
Container是YARN中的资源抽象,封装了各种资源。一个应用程序会分配一个Container,这个应用程序只能使用这个Container中描述的资源。
不同于MapReduceV1中槽位slot的资源封装,Container是一个动态资源的划分单位,更能充分利用资源。
2、 通信协议
YARN中各个组件之间的通讯都是以RPC(远程程序调用协议)协议来完成的,RPC通讯的双方,一方为Client,一方为Server,并且Client总是主动连接Server的,所以YARN是采用的拉式通讯模型。
YARN中的各方通讯有:
-
(1) JobClient与RM之间的通讯
- ApplicationClientProtocol,JobClient通过这个PRC协议提交应用程序、查询应用程序状态。 (2) 管理员与RM之间的通讯
- ResourceManagerAdministrationProtocol,Admin更新配置文件。 (3) AM与RM之间的通讯
- ApplicationMasterProtocol,AM注册和撤销自己,并为应用程序申请资源。 (4) AM与NM之间的通讯
- ContainerManagementProtocol,AM通过该PRC要求NM启动或者停止Container,获取各个Container的使用状态信息。 (5) NM与RM之间的通讯
- ResourceTracker,NM向RM注册,并定时发送心跳汇报当前节点的使用情况和Container运行情况。
3、 工作总流程
当jobclient向YARN提交一个应用程序后,YARN将分两个阶段运行这个应用程序:一是启动ApplicationMaster;第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,监控运行直到结束。
具体步骤如下:
(1) 用户向YARN提交一个应用程序,并指定ApplicationMaster程序、启动ApplicationMaster的命令、用户程序。
(2) RM为这个应用程序分配第一个Container,并与之对应的NM通讯,要求它在这个Container中启动应用程序ApplicationMaster。
(3) ApplicationMaster向RM注册,然后拆分为内部各个子任务,为各个内部任务申请资源,并监控这些任务的运行,直到结束。
(4) AM采用轮询的方式向RM申请和领取资源。
(5) RM为AM分配资源,以Container形式返回。
(6) AM申请到资源后,便与之对应的NM通讯,要求NM启动任务。
(7) NodeManager为任务设置好运行环境,将任务启动命令写到一个脚本中,并通过运行这个脚本启动任务
(8) 各个任务向AM汇报自己的状态和进度,以便当任务失败时可以重启任务。
(9) 应用程序完成后,ApplicationMaster向ResourceManager注销并关闭自己。
这一篇博文是【大数据技术●降龙十八掌】系列文章的其中一篇,点击查看目录:大数据技术●降龙十八掌