Hadoop——Yarn

Hadoop——Yarn

yarn官方文档

1. Yarn功能介绍:

  yarn为hadoop的分布式集群资源管理系统,市hadoop2.0的一特性。其特点为
    1、支持非mapreduce应用的需求
    2、可扩展性
    3、提高资源是用率
    4、用户敏捷性
    5、可以通过搭建为高可用

2.Yarn组成部分:

  • ResourceManger
      ResourceManger用来主要有两个功能。一个是任务分配,一个是资源调度。其中ApplicitionManager执行任务分配,Scheduler来进行资源分配。根据客户端程序的需求,调度优先级以及可用资源情况,动态分配特定节点运行应用程序。与NodeManager和ApplicationMaster相互协调工作。

    • Schedulor
        Schedulor在ResourceManger中属于纯调度器,负责各个运行中的应用的资源分配,受到资源容量,队列以及其他因素的影响。不负责应用程序的监控和状态追踪,不保证应用程序的失败或者硬件失败的情况对task重启,而是基于应用程序的资源需求执行其调度功能,使用了叫做资源container的概念,其中包括多种资源,比如,cpu,内存,磁盘,网络等。
    • ApplicationManager
        ApplicationManager用来接收客户端Client提交的job,找到合适的NodeManager启动ApplicationMaster,负责监控ApplicationMaster,遇到错误时,重启ApplicationMaster运行的Container。
  • NodeManager
      NodeManager是yarn节点的一个工作进程代理,主要与ResourceManager保持通信,负责启动和管理Container,监听Container的资源使用情况,管理日志,报告给ResourceManger。
      NodeManager启动时,向ResourceManger注册,发送心跳包来等待任务分配,接收到指令后启动Container应用程序,NodeManager只负责管理Container,并不清楚具体的处理细节。NodeManager与ResourceManger直接会一直保持联系,更新Container应用信息。
    主要职责:
      1、接收ResourceManager的请求,分配Container给应用的某个任务
      2、和ResourceManager交换信息以确保整个集群平稳运行。ResourceManager就是通过收集每个NodeManager的报告信息来追踪整个集群健康状态的,而NodeManager负责监控自身的健康状态。
      3、管理每个Container的生命周期
      4、管理每个节点上的日志
      5、执行Yarn上面应用的一些额外的服务,比如MapReduce的shuffle过程

    • Container
         Container是Yarn框架的计算单元,是具体执行应用task(如map task、reduce task)的基本单位。一个NodeManager中可以启动多个Container,一个Container只会存在与一个NodeManager,不会跨节点计算。
        一个Container即从ResourceManager中Schedulor调度过来的已分配的cpu和内存,由NodeManager监控。
        ApplicationMaster即为第一个Container。ApplicationMaster会与ResourceManager协调,根据需求申请新增多个Container,在任务进行过程中也可以动态释放和申请Container。
  • ApplicationMaster
       ApplicationMaster是协调集群中应用程序执行的进程。可以监控Container的执行进度。每个Client对应一个ApplicationMaster来分配Container。
       ApplicationMaster负责与ResourceManager协商资源(container)和NodeManager协同工作来执行和监控任务 。

3.Yarn框架作业流程:

在这里插入图片描述

  1. 客户端Client向ResourceManager提交job请求,并请求一个AppMaster实例
  2. ResourceManager向其中一个NodeManager发送AppMaster请求,包含各种资源信息,并创建实例,并建立ApplicationMaster的RPC端口和用于跟踪的URL,用来监控应用程序的状态
  3. ApplicationMaster向ResourceManager进行注册,注册之后客户端就可以查询ResourceManager获得自己ApplicationMaster的详细信息,以后就可以和自己的ApplicationMaster直接交互了。在注册响应中,ResourceManager会发送关于集群最大和最小容量信息
  4. 在平常操作中,ApplicationMaster根据resource-request协议向ResourceManager发送resource-request请求,ResourceManager会根据调度策略尽可能最优的为ApplicationMaster分配Container资源,作为资源请求的应答发个ApplicationMaster
  5. ApplicationMaster会与NodeManager进行通讯,让NodeManager来启动Container,并配合NodeManager对Container进行监控。ResourceManager不参与Container的监控,ResourceManager可以命令NodeManager杀死Container
  6. 应用程序的代码在启动的Container中运行,并把运行的进度、状态等信息通过application-specific协议发送给ApplicationMaster,随着作业的执行,ApplicationMaster将心跳和进度信息发给ResourceManager,在这些心跳信息中,ApplicationMaster还可以请求和释放一些container。
  7. 在应用程序运行期间,提交应用的客户端主动和ApplicationMaster交流获得应用的运行状态、进度更新等信息,交流的协议也是application-specific协议
  8. 一但应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster向ResourceManager取消注册然后关闭,用到所有的Container也归还给系统,当container被杀死或者回收,Resourcemanager都会通知NodeManager聚合日志并清理container专用的文件。

参考:http://www.noobyard.com/article/p-nrbprhib-hm.html