1. yarn的基本介绍和产生背景

YARN是Hadoop2引入的通用的资源管理和任务调度的平台,可以在YARN上运行MapReduce、Tez、Spark等多种计算框架,只要计算框架实现了YARN所定义的接口,都可以运行在这套通用的Hadoop资源管理和任务调度平台上。

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这种离线计算框架很多时候不能满足应用需求。

yarn的优点

1) 支持多种计算框架

YARN是通用的资源管理和任务调度平台,只要实现了YARN的接口的计算框架都可以运行在YARN上。

2) 资源利用率高

 多种计算框架可以共用一套集群资源,让资源充分利用起来,提高了利用率。

3) 运维成本低

避免一个框架一个集群的模式,YARN降低了集群的运维成本。

4) 数据可共享

共享集群模式可以让多种框架共享数据和硬件资源,减少数据移动带来的成本。

2. hadoop 1.0 和 hadoop 2.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。

3. yarn 集群的架构和工作原理

YARN的基本设计思想是将MapReduce V1中的JobTracker拆分为两个独立的服务:ResourceManager和ApplicationMaster。ResourceManager负责整个系统的资源管理和分配,ApplicationMaster负责单个应用程序的的管理。

#yyds干货盘点#Hadoop Yarn的架构和原理

1) ResourceManager

RM是一个全局的资源管理器,负责整个系统的资源管理和分配,它主要由两个部分组成:调度器(Scheduler)和应用程序管理器(Application Manager)。

调度器根据容量、队列等限制条件,将系统中的资源分配给正在运行的应用程序,在保证容量、公平性和服务等级的前提下,优化集群资源利用率,让所有的资源都被充分利用 。

应用程序管理器负责管理整个系统中的所有的应用程序,包括应用程序的提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重启它。

2) ApplicationMaster

用户提交的一个应用程序会对应于一个ApplicationMaster,它的主要功能有:

  • 与RM调度器协商以获得资源,资源以Container表示。
  • 将得到的任务进一步分配给内部的任务。
  • 与NM通信以启动/停止任务。
  • 监控所有的内部任务状态,并在任务运行失败的时候重新为任务申请资源以重启任务。

3) nodeManager

NodeManager是每个节点上的资源和任务管理器,一方面,它会定期地向RM汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,他接收并处理来自AM的Container启动和停止请求。

4) container

Container是YARN中的资源抽象,封装了各种资源。一个应用程序会分配一个Container,这个应用程序只能使用这个Container中描述的资源。

不同于MapReduceV1中槽位slot的资源封装,Container是一个动态资源的划分单位,更能充分利用资源。

4. yarn 的任务提交流程

#yyds干货盘点#Hadoop Yarn的架构和原理

当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注销并关闭自己

参考文档:

  1. 美团数据平台及数仓建设实践,超十万字总结

  2. 上百本优质大数据书籍,附必读清单(大数据宝藏)

  3. 五万字 | 耗时一个月整理出这份Hadoop吐血宝典