新一代资源管理调度框架YARN

一、 MapReduce1.0的缺陷

(1)JobTracker存在单点故障
(2)JobTracker“大包大揽”导致任务过重(任务多时内存开销大,上限4000节点)
(3)容易出现内存溢出(分配资源只考虑MapReduce任务数,不考虑CPU、内存)
(4)资源划分不合理(强制划分为slot ,包括Map slot和Reduce slot)

二、YARN设计思路

  MapReduce1.0既是一个计算框架,也是一个资源管理调度框架。
  到了Hadoop2.0以后,MapReduce1.0中的资源管理调度功能,被单独分离出来形成了YARN。YARN是一个纯粹的资源管理调度框架,而不是一个计算框架。
  被剥离了资源管理调度功能的MapReduce 框架就变成了MapReduce2.0,它是运行在YARN之上的一个纯粹的计算框架,不再自己负责资源调度管理服务,而是由YARN为其提供资源管理调度服务。

 三、YARN体系结构

  

  依据计算和存储就近原则,从上往下节点编号1,2,3,Application Master编号A,B,对应作业C、D。节点2资源/容器分配给作业C的map或reduce任务,即由A监控map reduce任务状态;节点1,3资源/容器分配给作业D的map或reduce任务,即由B监控map reduce任务状态。

1、ResourceManager----只有一个

所有资源分配与调度----调度器

处理客户端请求----应用程序管理器(Applications Manager)
启动/监控ApplicationMaster(一个作业/应用程序对应一个ApplicationMaster----应用程序管理器(Applications Manager)
监控NodeManager----应用程序管理器(Applications Manager)

2、ApplicationMaster----一个作业/应用程序对应一个ApplicationMaster
为用户提交的作业/应用程序申请资源,并分配给改作业的Map、Reduce任务
Map、Reduce任务启动、停止、监控与容错(容错指某个节点故障后会把任务移到其他节点继续执行)

定时向ResourceManager发送“心跳”消息,报告资源的使用情况和作业/应用程序的进度信息

3、NodeManager(节点管理)----一个节点一个,只负责容器管理,节点上map reduce任务管理由ApplicationMaster负责

单个节点上的资源管理

处理来自ResourceManger的命令
处理来自ApplicationMaster的命令

 4、ResourceManager详解

  ResourceManager(RM)是一个全局的资源管理器,负责整个系统的资源管理和分配,主要包括两个组件,即调度器(Scheduler)和应用程序管理器(Applications Manager)

  (1)调度器

  调度器接收来自ApplicationMaster的应用程序资源请求,把集群中的资源以“容器”的形式分配给提出申请的应用程序,容器的选择通常会考虑应用程序所要处理的数据的位置,进行就近选择,从而实现“计算向数据靠拢”

  容器(Container)作为动态资源分配单位,每个容器中都封装了一定数量的CPU、内存、磁盘等资源,从而限定每个应用程序可以使用的资源量,确保了任务之间的隔离

  调度器被设计成是一个可插拔的组件,YARN不仅自身提供了许多种直接可用的调度器,也允许用户根据自己的需求重新设计调度器

  (2)应用程序管理器(Applications Manager)

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

5、ApplicationMaster详解

  ResourceManager接收用户提交的作业,按照作业的上下文信息以及从NodeManager收集来的容器状态信息,启动调度过程,为用户作业启动一个ApplicationMasterApplicationMaster也运行在容器中,占用容器CPU、内存等资源。

  ApplicationMaster的主要功能是:
(1)当用户作业提交时,ApplicationMaster与ResourceManager协商获取资源,ResourceManager会以容器的形式为ApplicationMaster分配资源;
(2)把获得的资源进一步分配给内部的各个任务(Map任务或Reduce任务),实现资源的“二次分配”;
(3)与NodeManager保持交互通信进行应用程序的启动、运行、监控和停止,监控申请到的资源的使用情况,对所有任务的执行进度和状态进行监控,并在任务发生失败时执行失败恢复(即重新申请资源重启任务);
(4)定时向ResourceManager发送“心跳”消息,报告资源的使用情况和作业/应用程序的进度信息;
(5)当作业完成时,ApplicationMaster向ResourceManager注销容器,执行周期完成。

6、NodeManager详解

NodeManager是驻留在一个YARN集群中的每个节点上的代理,主要负责:
(1)容器生命周期管理
(2)监控每个容器的资源(CPU、内存等)使用情况
(3)跟踪节点健康状况
(4)以“心跳”的方式与ResourceManager保持通信
(5)向ResourceManager汇报作业的资源使用情况和每个容器的运行状态
(6)接收来自ApplicationMaster的启动/停止容器的各种请求

  需要说明的是,NodeManager主要负责管理抽象的容器,只处理与容器相关的事情,而不具体负责每个任务(Map任务或Reduce任务)自身状态的管理,因为这些管理工作是由ApplicationMaster完成的,ApplicationMaster会通过不断与NodeManager通信来掌握各个任务的执行状态

7、YARN部署

  在集群部署方面,YARN的各个组件是和Hadoop集群中的其他组件进行统一部署的

                 

                      图 YARN和Hadoop平台其他组件的统一部署

  第一层:ResourceManager和名称节点部署在一起

  第二层:ApplicationMaster、NodeManager和数据节点部署在一起(此时数据节点目的是运行ApplicationMaster)

  第三次:容器和数据节点部署在一起(此时数据节点目的是提供资源)

  备注:每个数据节点中的NodeManager是节点管理代理

posted on 2017-07-15 16:58  ostin  阅读(668)  评论(0)    收藏  举报