一概述

       应用程序是用户编写的处理数据的统称,它从YARN中申请资源完毕自己的计算任务。YARN自身相应用程序类型没有不论什么限制,它能够是处理短类型任务的MapReduce作业,也能够是部署长时间执行的服务的应用程序。应用程序能够向YARN申请资源完毕各类计算任务。
      在YARN上开发一个应用程序,通常而言,须要开发两个组件,各自是client和ApplicationMaster,当中client主要作用是将应用程序提交到YARN上,并与YARN 和Application
Master进行交互,查询应用程序的状态,完毕用户发送的一些命令。而ApplicationMaster则负责向YARN申请资源,并与NodeManager通信以启动各个Container,此外ApplicationMaster还负责监控各个任务执行状态,并在失败的时候为其又一次申请资源。
      YARN驱动使用“应用提交client(Application Submission Clien)”将一个“应用”提交给YARN资源管理器。借助“ClientRMProtocol”,client先获取一个新的“应用ID”,然后提交执行 “应用”。应用提交的信息里,包括应用Master要启动的Unix进程信息。提交信息还描写叙述了应用执行要使用的本地文件、jar包,执行须要的实际命令,
以及各种Unix环境设置等。

二 client设计

      YARN applictionclient须要实现ApplicationClientProtocol协议,该协议提供一系列訪问接口供用户与YARN交互,包含提交Application、查询Application执行状态、改动Application的属性(优先级)、杀死应用程序等。当中最重要的訪问接口之中的一个是提交application的函数。通常涉及以下两个步骤:
         步骤1:client创建一个ApplicationClientProtocol#getNewApplication从ResourceManager中获取唯一的一个APP ID.
         步骤2:Client通过RPC函数ApplicaitonClientProtocol#submitApplication将Application Master提交到RM上。

      一个功能完备的YARNclient,不仅须要与ResourceManger交互,还须要与ApplicationMaster交互以查询应用程序的内部状态(通常ResourceManager中没有与某个应用相关的信息)或者控制应用程序内部的任务(比方杀死任务,相同,ResourceManager中也不会有详细任务相关信息),这一部分须要由应用程序自己设计通信协议。
     
        注:在实际使用中为了减轻ResourceManager的负载,一旦应用程序的ApplicationMaster成功启动之后,client通常直接与ApplicationMaster通信,以查询它的执行状态或者控制它的执行流程(比方杀死一个任务等)。

三 ApplicationMaster设计

       AM须要与RM和NM两个服务交互,通过与RM交互,AM可获得任务计算所需的资源;通过与NM交互,AM能够启动计算任务,并监控它直到完毕。
  
AM-RM编写流程
     AM与RM之间通信涉及三个步骤,详细例如以下:
     1.注冊  
     AM启动的时候,首先向RM注冊,注冊信息封装到Protoclo Buffers消息RegisterApplicationMasterQuest中,主要包含一下字段:
       a.host  AM本次启动所在的结点host
       b.rpc_host:AM本次启动对外的RPCport号
       c.tracking_url:AM对外提供的追踪Web URL,client可通过该tracking_url查询应用程序运行状态。

     注冊成功后会收到下面信息:
        a.最大可申请的单个container占用的资源量。
        b.client_to_am_token_master_key:ClientToAMTokenMasterKey
        c.application_ACLs:应用程序訪问控制列表

    2.资源申请
     ApplicationMaster通过RPC函数ApplicationMasterProtocol#allocate向ResourceManager申请资源(以Container的形式).
     请求数据格式主要包含下面字段:
     2.1.ask: Application Master请求的资源列表,每一个资源请求用ResourceRequest表示,用户可使用AllocateRequest#getAskList/AllocateRequest#SetAskList获取或设置请求资源列表。
            ResouceRequest包括已下字段:
              a.priority:资源优先级,为一个正整数,值越小,优先级越高。
              b.resource_name:期望资源所在的节点或者是机架,假设是"*",表示不论什么节点上的资源均能够。
              c.capability:所需的资源量,当前支持CPU和内存两种资源
              d.num_containers:所须要满足以上条件的资源数目
              e.relax_locality:是否松弛本地性,即是否在没有满足节点本地性资源时,自己主动选择机架本地性资源或者其他资源。
     2.2.release:AM释放container列表
     2.3.response_id:本次 通信的应答ID,每次通信,该值都会加1.
     2.4.progress:应用程序的运行进度。
     2.5.blacklist_request:请求增加/移除黑名单的结点列表

       注:即使AM不须要不论什么的资源,它仍然须要周期性调用ApplicationProtoclo#allocate函数以维持与ResourceManager之间的心跳,否则,假设一定时间内RM未收到不论什么来自AM的消息,则系统会觉得它已经死掉了,会将其从系统中移除或者触发容错机制。AM每隔1000秒发送一次RPC资源请求。

     响应信息例如以下:
       a_m_command: ApplicationMaster需运行的命令,眼下主要有两个取值,各自是AM_RESYNC和AM_SHUTDOWN,分别表示重新启动和关闭。
       当RM发现AM所在结点处于黑名单中时,RM让AM关闭。
      response_id:本次通信的应答ID,每次通信,该值都会加一。
      allocated_containers:分配给应用程序的Container列表。RM将每一份可用的资源封装成一个Container,该Container中有关于这份资源的具体信息,通常而言,ApplicationMaster在收到一个 Container后,会在这个Container中执行一个任务。
      completed_container_statuses:执行完毕的Container状态列表,须要注意的是,该列表中的Container所处的状态可能是执行成功、执行失败和被杀死。
     limit:眼下集群可用的资源总量
     updated_nodes:当前集群中全部结点执行状态列表。
     num_cluster_nodes:当前集群中可用节点总数
   
 3.程序退出
    AM通过RPC函数ApplicationMasterProtocol$finishApplicationMaster告诉RM应用程序运行完成,并退出。


AM-NM编写流程

     1.AM将申请到的资源二次分配给内部的任务,并通过RPC函数ContainerManagementProtocol#startContainer与相应的NodeManger通信以启动Container(包括任务描写叙述、资源描写叙述等信息),该 函数的參数类型为StartContainersRequest
     2.为了掌握各个Container执行状态,AM会通过RPC函数向NM询问Container执行状态,一旦发现某个Container执行失败,AM可尝试又一次为相应的任务申请资源。
     3.一旦一个Container执行完毕后,AM能够通过RPC函数ContainerManagementProtocol#stopContainer释放Container.

     注:  1.YARN 是一个资源管理系统,它不仅要负责分配资源,还负责回收资源。当一个Container执行完后,它会主动确认Container是否将相应的资源释放掉了,也就是说,不论什么一个Container执行结束后,AM必须调用RPC函数ContainerManagementProtcol#stopContainer释放Container.
          

 四小结
      用户想要编写一个执行在YARN上的应用程序时,通常须要实现两个组件,各自是client和ApplicationMaster,当中client主要用于提交应用程序和管理应用程序,而ApplicationMaster则负责实现应用程序的任务切分、调度、监控等功能。



Hadoop -YARN 应用程序设计概述的更多相关文章

  1. Hadoop - YARN 概述

    一 概述       Apache Hadoop YARN (Yet Another Resource Negotiator,还有一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源 ...

  2. Apache Hadoop YARN: 背景及概述

    从2012年8月开始Apache Hadoop YARN(YARN = Yet Another Resource Negotiator)成了Apache Hadoop的一项子工程.自此Apache H ...

  3. 大数据入门第五天——离线计算之hadoop(上)概述与集群安装

    一.概述 根据之前的凡技术必登其官网的原则,我们当然先得找到它的官网:http://hadoop.apache.org/ 1.什么是hadoop 先看官网介绍: The Apache™ Hadoop® ...

  4. YARN分析系列之二 -- Hadoop YARN各个自模块说明

    先做如下声明,本代码版本是基于 3.1.2 版本. 其实,我们自己在写代码的时候,会有意识地将比较大的功能项独立成包,独立成module, 独立成项目,项目之间的关系既容易阅读理解,又便于管理. 如下 ...

  5. Hadoop YARN 100-1知识点

    0 YARN中实体 资源管理者(resource manager, RM) 长时间运行的守护进程,负责管理集群上资源的使用 节点管理者(node manager, NM) 长时间运行的守护进程,在集群 ...

  6. hadoop yarn running beyond physical memory used

    老是报物理内存越界,kill container,然后把yarn.scheduler.minimum-allocation-mb设成2048就好了 跟这个yarn.nodemanager.pmem-c ...

  7. Hadoop YARN配置参数剖析—RM与NM相关参数

    注意,配置这些参数前,应充分理解这几个参数的含义,以防止误配给集群带来的隐患.另外,这些参数均需要在yarn-site.xml中配置. 1.    ResourceManager相关配置参数 (1) ...

  8. Hadoop Yarn内存资源隔离实现原理——基于线程监控的内存隔离方案

    注:本文以hadoop-2.5.0-cdh5.3.2为例进行说明.   Hadoop Yarn的资源隔离是指为运行着不同任务的“Container”提供可独立使用的计算资源,以避免它们之间相互干扰.目 ...

  9. hadoop错误org.apache.hadoop.yarn.exceptions.YarnException Unauthorized request to start container

    错误: 14/04/29 02:45:07 INFO mapreduce.Job: Job job_1398704073313_0021 failed with state FAILED due to ...

随机推荐

  1. iOS如何兼容的应用程序32位系统和64Bit系统

    苹果发布iPhone5S时刻,64应用程序位去了眼前.当时我看到苹果公布的官方数据iOS7.x的SDK支撑64位应用程序.而内置的应用程序已经64位置. 我记得自己刚刚接触电脑时还有16位的系统,指针 ...

  2. 国内Android应用推广的六大主流方式

    国内Android应用推广的六大主流方式 http://mobi.baike.com/article-19433.html 随着Android市场份额的飞速增长,越来越多的国内开发团队和公司開始投入A ...

  3. 基于docker构建jenkins和svn服务(转)

    码农们很定都知道svn的重要性,机器坏掉丢代码的惨痛教训想必很多人都有. jenkins可能很多人都不了解.这是一个持续集成的工具,在敏捷开发领域很流行:跟svn结合可以实现定期build.check ...

  4. Struts2+Spring+Hibernate step by step 11 ssh拦截验证用户登录到集成

    注意:该系列文章从教师王健写了一部分ssh集成开发指南 引言: 之前没有引入拦截器之前,我们使用Filter过滤器验证用户是否登录,在使用struts2之后,全然能够使用拦截器,验证用户是否已经登录, ...

  5. ftp的port和pasv型号比较

    一个.ftp的port和pasv工作方式        FTP使用2个TCPport,首先是建立一个命令port(控制port),然后再产生一个数据port. 国内非常多教科书都讲ftp使用21命令p ...

  6. Windows下一个SlikSVN使用

    我相信所有的应SVN不熟悉.使用过.可是并非人人都自己配置过SVNserver.以下就是我配置SVNserver的步骤.以及在配置过程中碰见的一些问题,在此记录,希望对你有所帮助. 安装 双击执行&q ...

  7. cocos2d 消除类游戏简单的算法 (一)

    1. 游戏视频演示 2.三消游戏我的理解 上面视频中的游戏.我做了2个星期时间,仅仅能算个简单Demo,还有bug.特效也差点儿没有.感觉三消游戏主要靠磨.越磨越精品. 市场上三消游戏已经超级多了.主 ...

  8. ExtJS4 动态生成grid出口excel(纯粹的接待)

    搜索相当长的时间,寻找一些样本,因为我刚开始学习的原因,大多数人不知道怎么用.. 他曾在源代码.搞到现在终于实现了主下载.. 表的采集格不重复下载一个小BUG,一个使用grid初始化发生的BUG 以下 ...

  9. TDD和BDD

    开发人员看测试之TDD和BDD   前言: 已经数月没有来园子了,写博客贵在坚持,一旦松懈了,断掉了,就很难再拾起来.但是每每看到自己博客里的博文的浏览量每天都在增加,都在无形当中给了我继续写博客的动 ...

  10. 关于Java和.NET之间的通信问题(JSON)

    前言: 最近项目在某XX领导的所谓指引下,非要转型Java,转就转吧,在转的过程前期是个痛苦期,特别.NET旧有项目和Java新项目需要通信时. 进入主题,Java和.NET之间需要通信,这时媒介很多 ...