Hadoop 2.0 Yarn原理(大数据学习)

Hadoop 2.0 Yarn原理

预习笔记

(一)Yarn基本组件

Yarn主要是由4个组件组成的,分别是ResourceManager,NodeManager,ApplicationMaster和Container。

  1. ResourceManager(RM)
    它负责处理客户端的请求,对各NodeManager上的资源进行统一管理和调度,给ApplicationMaster分配空闲的container运行并监控其运行状态,主要功能由内置的两个组件完成:
    (1)调度器(Scheduler)
    调度器根据容量、队列等限制条件,将系统中的抽象资源(Container)分配给正在运行的应用程序,而不负责监控跟踪应用程序的状态。
    (2)应用程序管理器(ApplicationsManager)
    应用程序管理器负责管理系统所有应用程序,包括应用程序提交,与调度器协商资源以启动ApplicationMaster,监控ApplicationMaster运行状态,跟踪每一个Container分发的进度与状态。

  2. NodeManager(NM)
    它是每一个节点上的资源与任务管理器,它会定时向ResourceManager汇报本节点上资源使用情况和各个Container的运行状态。同时接受来自AppMst的请求。

  3. ApplicationMaster(AM)
    用户提交的应用程序均包含ApplicationMaster,它负责应用的监控与跟踪执行任务状态,重启失败任务,它向ResourceManager协商资源并与NodeManager协同完成对Task的监管。

  4. Container
    是Yarn的资源抽象,它封装了某个节点的多维度资源,ResourceManager向AM分配资源时都是以Container为单位返回的。

(二)Yarn基本架构

Hadoop 2.0 Yarn原理(大数据学习)
这张图是apache官网上对Yarn架构的描述,提交一个作业具体运行流程大致如下:

  1. Client端提交计算任务给ResourceManager
  2. ResourceManager中的ApplicationsManager启用第一个Container,同时启动ApplicationMaster
  3. ApplicationMaster接收到后向ApplicationsManager提出注册
  4. 注册之后ApplicationMaster就开始向ResourceManager中的另一个组件Scheduler申请计算资源,同时它也将自身各种状态信息提交
  5. Scheduler接收申请后就开始分配资源,最后向ApplicationMaster以Container的形式返回一个资源列表
  6. ApplicationMaster接收到这个资源列表之后就要向对应NodeManager索要计算资源
  7. 对应NodeManager启动MapTask和ReduceTask进行计算
  8. NodeManager执行这两个Task完毕后汇报回ApplicationMaster
  9. ApplicationMaster再将运行计算状态汇报给ApplicationManager

(三)Yarn调度器

在hadoop中支持若干种调度算法,一般有3种主要的任务调度方式:

  1. FIFO Scheduler(队列调度器)
    把任务按照提交的顺序排成一个队列,在进行资源分配时,先分配给队列中最头部的任务,待最头部的任务满足需求后再分配排在它后面的任务,遵循“先进先出原则”。但具有易堵塞不灵活等缺点,不实用。
    Hadoop 2.0 Yarn原理(大数据学习)
    若有500M资源,左边这个队列中job1,job2同时处理,job3等待,这种情况还好。但若出现右边这样的情况就不好了,job3执行独占所有资源,job2,job1都要等待,这会造成堵塞,计算慢等一系列问题。

  2. Capacity Scheduler(容量调度器)
    允许共享整个集群的全部资源,每个组织获得一部分计算能力,通过为每个组织获得专门的队列,然后再为每个队列分配一定的集群资源,就可以使用了。这里的容量会依据任务大小人为分配资源比例,而在一个队列的内部资源调度依然遵循FIFO原则。
    Hadoop 2.0 Yarn原理(大数据学习)
    这张图中有多个任务待处理,而每一个任务所需的资源不会太一样,因此通过手动调整资源分配比例达到资源进一步利用。
    Hadoop 2.0 Yarn原理(大数据学习)
    依然说有500M资源,这里的分配就灵活多了,它细分到每一个app所占资源,确保了大任务资源多小任务资源少,减少浪费。

  3. Fair Scheduler(公平调度器)
    所谓公平默认规则是一个任务占用一半资源,若有两个用户同时启动进程,那么就分配总资源的一半。若该用户继续启动更多job那么就不断分确保每个job所占用的资源都是一样的。这里当然可以自己定义公平的规则。
    Hadoop 2.0 Yarn原理(大数据学习)
    在这张图中可以看出,不同用户占有相同数量的资源,而相同用户下不同job也占有相同数量的资源,可以说保证了“公平”。