首页 > 代码库 > YARN原理介绍

YARN原理介绍

文章包含内容:

1. YARN产生背景

2. YARN基本架构及原理

-----------------------------------------------------------

1. YARN产生背景

Hadoop1.x中的MapReduce构成图

技术分享

  在Hadoop1.0中,MapReduce主要是由JobTracker和TaskTracker构成。MapReduce采用了Master/Slave架构,表现形式为一个JobTracker带多个TaskTracker,作为Master的JobTracker,它是整个集群的唯一的全局管理者,它也是一个服务进程,启动之后,它会一直监听并接收来自各个TaskTracker发送的“心跳”信息,资源使用情况和任务运行情况。

  JobTracker主要有两大功能:首先是作业布置,在Hadoop中,每个应用程序被表示为一个作业,每个作业又被分成多个任务,JobTracker的作业控制模块负责作业的分解和状态的监控。监控是对TaskTracker的状态进行监控,作业状态、任务状态进行监控,其作用是容错和对任务调度提供依据。第二个JobTracker的主要功能是资源管理,JobTracker在Hadoop1中身兼多职,这也为它后面,包括它的扩展性和单点故障埋下了隐患。

  作为Slave的TaskTracker有两个作用:第一个是汇报心跳,TaskTracker会周期性的将所有节点上各种信息通过心跳机制汇报给JobTracker,包括节点的健康状况、资源使用情况、任务执行进度、任务进行状态等。第二个是执行命令,执行JobTracker给TaskTracker下达的各种命令,包括启动任务、提交任务、杀死任务、杀死作业和重新初始化。

Hadoop1.x中MapReduce弊端

  扩展性差、可靠性差、资源利用率低、无法支持多种计算框架 

扩展性差

  JobTracker兼备了资源管理和作业控制两大功能,这成为系统的一个最大瓶颈,它严重制约了Hadoop集群的扩展性。后面为解决这个问题,设置了YARN,YARN只负责资源管理。

 可靠性差

   因为Hadoop1种MapReduce采用Master/slave结构,因此作为Master的JobTracker一旦发生单点故障,将导致整个集群不可用。

资源利用率低

   Hadoop1的MapReduce采用了一种基于槽位(slot)的资源分配模式,槽位是一种粗粒度的资源划分单位,通常一个任务不会用完槽位的固定资源,且其他任务也无法使用这些空闲资源。我们通常将槽位分为map slot和reduce slot两种,且不允许它们之间共享,常常会导致一种槽位资源紧张,而另一种槽位资源空闲,这会大大浪费资源。后面也会讲到YARN的资源分配的单位container。

  无法支持多种计算框架

   MapReduce是一种基于磁盘的离线计算,现在大数据不仅仅包括这种离线计算,还包括内存计算、流式计算、迭代式计算,而hadoop1和MapReduce无法支持多种计算框架。在一个平台上集成多种计算框架的优点是:1.资源利用率高,如果每个框架一个集群,则往往因为应用程序的数量和资源利用率的不均衡,使得在某段时间内,某些框架内的资源紧张,而另外一些资源空闲。共享集群模式则通过多种框架共享资源,使集群中的资源可以充分地利用。2.运维成本低。3.数据共享 由于数据量的暴增,跨集群间的数据移动不仅花费时间长,且运维成本也会大大增加,共享集群可以让多种框架共享数据和硬件资源,这可以减少数据移动带来的成本。

 

 基于上述缺点,Hadoop2提供了一个资源管理器YARN。

 

2. YARN基本架构及原理

  YARN是一种Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。YARN主要是由ResourceManager,NodeManager和application master和相应的container构成的。

YARN的主要组件

  ResourceManager

  ApplicaitonMaster

  NodeManager

  Container

YARN的结构图

技术分享

  Resource Manager主要负责这些Node Manager资源统一的管理和调度,当用户提交一个应用程序,需要提交一个用于跟踪管理这个应用程序的Application Master,在Node Manager上Container上产生的一个Application Master,Application Master主要负责向Resource Manager申请资源,并要求NodeManager启动可以占用一定资源任务,Application Master向Resource Manager不断地以轮询的方式索要资源,要到资源以后,它会要求Node Manager在相应的资源上启动它的任务。

  Resource Manager是什么?

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

  Resource Manager的调度器是一个纯的调度器,它不从事任何与应用程序相关的工作,它将系统中的资源分配给各个正在运行中的程序,它不负责监控或者跟踪应用的执行状态,也不负责重新启动因应用程序失败或者硬件故障而产生的失败任务。这些都由应用程序对应的Application Master完成。调度器是一个可插拔的组件,用户可以根据自己的需要设计新的调度器,YARN提供了很多直接可用的调度器。

  应用程序管理器,它负责整个系统中所有应用程序,包括应用程序提交,与调度器协商资源已启动Application Master,监控Application Master运行状态,并在失败的时候通知它。而具体的任务,则交给Application Master去管理,相当于一个项目经理。用户提交的每一个应用程序都包含一个Application Master,Application Master主要是与Resource Manager协调协商获取资源Application Master将得到的作业分配内部的这些任务Application Master负责与Node Manager通信以启动停止任务,并监控该应用程序所在,所有任务运行状态,当任务运行失败时,重新为任务申请资源并重启任务。

  Node Manager作为YARN的一个slave,它是整个运行的一个执行者,Node Manager是每个节点上资源和任务管理器,它会定时向Resource Manager汇报本节点的资源使用情况和各个Container(这是一个动态的资源单位)的运行状态,并且Node Manager接收并处理来自Application Master的Container启动和停止等请求。Container资源抽象,它是封装了某个节点的多维度资源,比如封装了内存、CPU、磁盘、网络,当Application Master向Resource Manager申请资源时,Resource Manager为Application Master返回的资源是一个Container,得到资源的任务只能使用该Application Master,Container是根据应用程序需求动态生成的。

流程图

技术分享

 

工作原理

  首先,Client向YARN中提交一个应用程序,包括Application Master,启动Application Master和用户程序;

  然后,ResourceManager会为该应用程序分配一个Container,它首先会跟Node Manager进行通信,要求它在这个Container中启动应用程序的Application Master;

  第三步,Application Master一旦生成以后,它首先会向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源并监控它们的运行状态,直到运行结束,它会以轮询的方式,通过RPC协议向ResouceManager申请和领取资源,一旦Application Master申请到资源后,它会和Node Manager通信,要求它启动任务;

  Node Manager为任务设置好运行环境,以及环境变量、架包还有二进制程序,将任务启动命令写在脚本中,并通过运行该脚本启动任务,各个任务通过RPC协议向Application Master汇报自己的状态和进度,这样会让Application Master随时掌握各个任务的一个运行状态,一旦任务失败,Application Master就会重启该任务,重新申请资源。应用程序运行完成后,Application Master就会向ResourceManager注销并关闭此任务。我们在应用程序整个运行过程中可以用RPC向Application Master查询应用程序当前的运行状态,在Web上可以看到整个的作业的运行状态。

 

 

 

 

 

YARN原理介绍