hadoop之yarn详解(基础架构篇)

本文主要从yarn的基础架构和yarn的做业执行流程进行阐述html

1、yarn的概述

       Apache Yarn(Yet Another Resource Negotiator的缩写)是hadoop集群资源管理器系统,Yarn从hadoop 2引入,最初是为了改善MapReduce的实现,可是它具备通用性,一样执行其余分布式计算模式。sql

在MapReduce1中,具备以下局限性:apache

一、扩展性差:jobtracker兼顾资源管理和做业控制跟踪功能跟踪任务,启动失败或迟缓的任务,记录任务的执行状态,维护计数器),压力大,成为系统的瓶颈
二、可靠性差:采用了master/slave结构,master容易单点故障
三、资源利用率低:基于槽位的资源分配模型,槽位是一种粗粒度的资源划分单位,一般一个任务不会用完一个槽位的资源,hadoop1分为map slot和reduce slot,而它们之间资源不共享,形成一些资源空闲。
四、不支持多框架:不支持多种计算框架并行安全

  yarn很好解决了MapReduce1中的局限性:yarn基本思想;一个全局的资源管理器resourcemanager和与每一个应用对用的ApplicationMaster,Resourcemanager和NodeManager组成全新的通用系统,以分布式的方式管理应用程序。网络

因此针对MapReduce1,yarn就有了以下特色:架构

一、支持非mapreduce应用的需求
二、可扩展性
三、提升资源是用率
四、用户敏捷性
五、能够经过搭建为高可用app

2、yarn架构组件

        Yarn从总体上仍是属于master/slave模型,主要依赖于三个组件来实现功能,第一个就是ResourceManager,是集群资源的仲裁者,它包括两部分:一个是可插拔式的调度Scheduler,一个是ApplicationManager,用于管理集群中的用户做业。第二个是每一个节点上的NodeManager,管理该节点上的用户做业和工做流,也会不断发送本身Container使用状况给ResourceManager。第三个组件是ApplicationMaster,用户做业生命周期的管理者它的主要功能就是向ResourceManager(全局的)申请计算资源(Containers)而且和NodeManager交互来执行和监控具体的task。架构图以下:框架

 

 

2.一、Resourcemanager 

    ResourceManager 拥有系统全部资源分配的决定权,负责集群中全部应用程序的资源分配,拥有集群资源主要、全局视图。所以为用户提供公平的,基于容量的,本地化资源调度。根据程序的需求,调度优先级以及可用资源状况,动态分配特定节点运行应用程序。它与每一个节点上的NodeManager和每个应用程序的ApplicationMaster协调工做。分布式

   ResourceManager的主要职责在于调度,即在竞争的应用程序之间分配系统中的可用资源,并不关注每一个应用程序的状态管理。oop

   ResourceManager主要有两个组件:Scheduler和ApplicationManager:Scheduler是一个资源调度器,它主要负责协调集群中各个应用的资源分配,保障整个集群的运行效率。Scheduler的角色是一个纯调度器,它只负责调度Containers,不会关心应用程序监控及其运行状态等信息。一样,它也不能重启因应用失败或者硬件错误而运行失败的任务。

2.1.一、Scheduler

    Scheduler是一个可插拔的插件,负责各个运行中的应用的资源分配,受到资源容量,队列以及其余因素的影响。是一个纯粹的调度器,不负责应用程序的监控和状态追踪,不保证应用程序的失败或者硬件失败的状况对task重启,而是基于应用程序的资源需求执行其调度功能,使用了叫作资源container的概念,其中包括多种资源,好比,cpu,内存,磁盘,网络等。在Hadoop的MapReduce框架中主要有三种Scheduler:FIFO Scheduler,Capacity Scheduler和Fair Scheduler。

FIFO Scheduler:先进先出,不考虑做业优先级和范围,适合低负载集群。
Capacity Scheduler:将资源分为多个队列,容许共享集群,有保证每一个队列最小资源的使用。
Fair Scheduler:公平的将资源分给应用的方式,使得全部应用在平均状况下随着时间获得相同的资源份额。

2.1.二、ApplicationManager

    ApplicationManager主要负责接收job的提交请求,为应用分配第一个Container来运行ApplicationMaster,还有就是负责监控ApplicationMaster,在遇到失败时重启ApplicationMaster运行的Container

2.二、NodeManager

    NodeManager是yarn节点的一个“工做进程”代理,管理hadoop集群中独立的计算节点,主要负责与ResourceManager通讯,负责启动和管理应用程序的container的生命周期,监控它们的资源使用状况(cpu和内存),跟踪节点的监控状态,管理日志等。并报告给RM。

    NodeManager在启动时,NodeManager向ResourceManager注册,而后发送心跳包来等待ResourceManager的指令,主要目的是管理resourcemanager分配给它的应用程序container。NodeManager只负责管理自身的Container,它并不知道运行在它上面应用的信息。在运行期,经过NodeManager和ResourceManager协同工做,这些信息会不断被更新并保障整个集群发挥出最佳状态

主要职责:
一、接收ResourceManager的请求,分配Container给应用的某个任务
二、和ResourceManager交换信息以确保整个集群平稳运行。ResourceManager就是经过收集每一个NodeManager的报告信息来追踪整个集群健康状态的,而NodeManager负责监控自身的健康状态。
三、管理每一个Container的生命周期
四、管理每一个节点上的日志
五、执行Yarn上面应用的一些额外的服务,好比MapReduce的shuffle过程

2.2.一、Container

     Container是Yarn框架的计算单元,是具体执行应用task(如map task、reduce task)的基本单位。Container和集群节点的关系是:一个节点会运行多个Container,但一个Container不会跨节点。

   一个Container就是一组分配的系统资源,现阶段只包含两种系统资源(以后可能会增长磁盘、网络、GPU等资源),由NodeManager监控,Resourcemanager调度。

   每个应用程序从ApplicationMaster开始,它自己就是一个container(第0个),一旦启动,ApplicationMaster就会更加任务需求与Resourcemanager协商更多的container,在运行过程当中,能够动态释放和申请container。

2.三、ApplicationMaster

     ApplicationMaster负责与scheduler协商合适的container,跟踪应用程序的状态,以及监控它们的进度,ApplicationMaster是协调集群中应用程序执行的进程。每一个应用程序都有本身的ApplicationMaster,负责与ResourceManager协商资源(container)和NodeManager协同工做来执行和监控任务 。

    当一个ApplicationMaster启动后,会周期性的向resourcemanager发送心跳报告来确认其健康和所需的资源状况,在建好的需求模型中,ApplicationMaster在发往resourcemanager中的心跳信息中封装偏好和限制,在随后的心跳中,ApplicationMaster会对收到集群中特定节点上绑定了必定的资源的container的租约,根据Resourcemanager发来的container,ApplicationMaster能够更新它的执行计划以适应资源不足或者过剩,container能够动态的分配和释放资源。

3、yarn做业调度流程

Application在Yarn中的执行过程以下图所示:

 

 

一、客户端程序向ResourceManager提交应用并请求一个ApplicationMaster实例,ResourceManager在应答中给出一个applicationID以及有助于客户端请求资源的资源容量信息。

二、ResourceManager找到能够运行一个Container的NodeManager,并在这个Container中启动ApplicationMaster实例

Application Submission Context发出响应,其中包含有:ApplicationID,用户名,队列以及其余启动ApplicationMaster的信息,
Container Launch Context(CLC)也会发给ResourceManager,CLC提供了资源的需求,做业文件,安全令牌以及在节点启动ApplicationMaster所须要的其余信息。
当ResourceManager接收到客户端提交的上下文,就会给ApplicationMaster调度一个可用的container(一般称为container0)。而后ResourceManager就会联系NodeManager启动ApplicationMaster,并创建ApplicationMaster的RPC端口和用于跟踪的URL,用来监控应用程序的状态。

三、ApplicationMaster向ResourceManager进行注册,注册以后客户端就能够查询ResourceManager得到本身ApplicationMaster的详细信息,之后就能够和本身的ApplicationMaster直接交互了。在注册响应中,ResourceManager会发送关于集群最大和最小容量信息,

四、在日常的操做过程当中,ApplicationMaster根据resource-request协议向ResourceManager发送resource-request请求,ResourceManager会根据调度策略尽量最优的为ApplicationMaster分配container资源,做为资源请求的应答发个ApplicationMaster

五、当Container被成功分配以后,ApplicationMaster经过向NodeManager发送container-launch-specification信息来启动Container, container-launch-specification信息包含了可以让Container和ApplicationMaster交流所须要的资料,一旦container启动成功以后,ApplicationMaster就能够检查他们的状态,Resourcemanager不在参与程序的执行,只处理调度和监控其余资源,Resourcemanager能够命令NodeManager杀死container,

六、应用程序的代码在启动的Container中运行,并把运行的进度、状态等信息经过application-specific协议发送给ApplicationMaster,随着做业的执行,ApplicationMaster将心跳和进度信息发给ResourceManager,在这些心跳信息中,ApplicationMaster还能够请求和释放一些container。

七、在应用程序运行期间,提交应用的客户端主动和ApplicationMaster交流得到应用的运行状态、进度更新等信息,交流的协议也是application-specific协议

八、一但应用程序执行完成而且全部相关工做也已经完成,ApplicationMaster向ResourceManager取消注册而后关闭,用到全部的Container也归还给系统,当container被杀死或者回收,Resourcemanager都会通知NodeManager聚合日志并清理container专用的文件。

 

更多hadoop生态文章见: hadoop生态系列

参考:

https://hadoop.apache.org/docs/r2.7.7/hadoop-yarn/hadoop-yarn-site/YARN.html

 

《hadoop yarn权威指南》