一 概述

      Apache Hadoop YARN (Yet Another Resource Negotiator,还有一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统。可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大优点。 
                   

   
                                           


YARN最初是为了修复MapReduce实现里的明显不足,并对可伸缩性(支持一万个节点和二十万个内核的集群)、可靠性和集群利用率进行了提升。YARN实现这些需求的方式是,把Job
Tracker的两个主要功能(资源管理和作业调度/监控)分成了两个独立的服务程序——全局的资源管理(RM)和针对每一个应用的应用 Master(AM)。这样一个应用要么是传统意义上的MapReduce任务,要么是任务的有向无环图(DAG)。

          YARN从某种那个意义上来说应该算做是一个云操作系统,它负责集群的资源管理。在操作系统之上能够开发各类的应用程序,比如批处理MapReduce、流式作业Storm以及实时型服务Storm等。这些应用能够同一时候利用Hadoop集群的计算能力和丰富的数据存储模型,共享同一个Hadoop
集群和驻留在集群上的数据。

此外,这些新的框架还能够利用YARN的资源管理器,提供新的应用管理器实现。


二 YARN的组成

                                        
                                

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmd6aGVianV0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

                                             YARN的基本组成
 
YARN的核心思想 将JobTracker和TaskTacker进行分离,它由以下几大构成组件: 
        a. 一个全局的资源管理器  ResourceManager
        b. ResourceManager的每一个节点代理  NodeManager
        c. 表示每一个应用的 ApplicationMaster
        d. 每个ApplicationMaster拥有多个Container在NodeManager上执行

以下对它们做一个简单的介绍:

1. ResourceManager(RM)

         RM是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications
Manager。ASM)。

     
      调度器  调度器依据容量、队列等限制条件(如每一个队列分配一定的资源,最多运行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。

须要注意的是。该调度器是一个“纯调度器”,它不再从事不论什么与详细应用程序相关的工作,比方不负责监控或者跟踪应用的运行状态等,也不负责又一次启动因应用运行失败或者硬件故障而产生的失败任务,这些均交由应用程序相关的ApplicationMaster完毕。调度器仅依据各个应用程序的资源需求进行资源分配,而资源分配单位用一个抽象概念“资源容器”(Resource
Container。简称Container)表示,Container是一个动态资源分配单位,它将内存、CPU、磁盘、网络等资源封装在一起,从而限定每一个任务使用的资源量。此外。该调度器是一个可插拔的组件,用户可依据自己的须要设计新的调度器,YARN提供了多种直接可用的调度器,比方Fair Scheduler和Capacity Scheduler等。


       应用程序管理器  应用程序管理器负责管理整个系统中全部应用程序,包含应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster执行状态并在失败时又一次启动它等。

2. ApplicationMaster(AM)

          用户提交的每一个应用程序均包括一个AM,主要功能包括:
          与RM调度器协商以获取资源(用Container表示);
          将得到的任务进一步分配给内部的任务(资源的二次分配)。
          与NM通信以启动/停止任务。
          监控全部任务执行状态,并在任务执行失败时又一次为任务申请资源以重新启动任务。
   
      当前YARN自带了两个AM实现,一个是用于演示AM编写方法的实例程序distributedshell。它能够申请一定数目的Container以并行执行一个Shell命令或者Shell脚本;还有一个是执行MapReduce应用程序的AM—MRAppMaster。

       注:RM仅仅负责监控AM,在AM执行失败时候启动它,RM并不负责AM内部任务的容错,这由AM来完毕。


  3. NodeManager(NM)
       NM是每一个节点上的资源和任务管理器,一方面。它会定时地向RM汇报本节点上的资源使用情况和各个Container的执行状态;还有一方面,它接收并处理来自AM的Container启动/停止等各种请求。

    4. Container
           Container是YARN中的资源抽象。它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示。YARN会为每一个任务分配一个Container,且该任务仅仅能使用该Container中描写叙述的资源。

     注:1. Container不同于MRv1中的slot,它是一个动态资源划分单位。是依据应用程序的需求动态生成的。

            2.  如今YARN仅支持CPU和内存两种资源,且使用了轻量级资源隔离机制Cgroups进行资源隔离。
      
            YARN的资源管理和执行框架都是按主/从范例实现的——Slave ---节点管理器(NM)执行、监控每一个节点。并向集群的Master---资源管理器(RM)报告资源的可用性状态,资源管理器终于为系统里全部应用分配资源。

        特定应用的运行由ApplicationMaster控制。ApplicationMaster负责将一个应用切割成多个任务。并和资源管理器协调运行所需的资源,资源一旦分配好,ApplicationMaster就和节点管理器一起安排、运行、监控独立的应用任务。

        须要说明的是。 YARN不同服务组件的通信方式採用了事件驱动的异步并发机制,这样能够简化系统的设计。


四 YARN 架构简析
      
   集中式架构
        集中式调度器(Monolithic Schuduler)的特点是,资源的调度和应用程序的管理功能所有放到一个进程中完毕,开源界典型的代表是MRv1 JobTracker的实现。

这样设计的缺点非常明显,扩展性差:首先,集群规模受限;其次。新的调度策略难以融入到现有代码中,比方之前仅支持MapReduce作业,如今要支持流式作业,而将流式作业的调度策略嵌入到中央调度当中是一项非常难的工作。


   双层调度架构
        为了客服集中式调度器的不足,双层调度器是一种非常easy被想到的解决之道。它可看作是一种分而治之的机制或者是策略下放机制:双层调度器仍保留一个经简化的集中式资源调度器,但详细任务相关的调度策略则下方到各个应用程序调度器完毕。

这样的调度器的典型代表是Mesos或YARN。

Mesos调度器由两部分组成。各自是资源调度器和框架(应用程序)调度器,当中,资源调度器负责将集群中的资源分配给各个(应用程序),而框架(应用程序)调度器负责将资源进一步分配给内部的各个任务。用户非常easy将一种框架或者系统接入Mesos.

       
       双层调度器的特点是:各个框架调度器并不知道整个集群资源使用情况,仅仅是被动地接受资源;资源调度器仅将可用的资源推送给各个框架,而由框架自己选择是使用还是拒绝这些资源;一旦框架接受到新资源,再进一步将资源分配给其内部的任务,进而实现双层调度。然而这样的调度器也是有缺点。主要表如今下面两个方面:1.各个框架无法知道整个集群的实时资源使用情况;採用悲观锁,并发粒度小。

           具体介绍能够參考这篇论文:


五 小结
          
       随着YARN的不断发展和完好,各种类型的应用程序。包含类似MapReduce的短作业、类似Web
Service的长作业等。均可直接部署和执行在YARN上,当前YARN对外提供的接口均是底层接口,这给用户编写和调试应用程序带来了非常大的麻烦,比方无法聚集分散在各个节点上的应用程序日志、应用程序生命周期难以管理、缺乏第三方工具将一个现有的系统执行在YARN上等。仅仅有这些问题都得到非常好的解决,YARN才干够走向成熟。

Hadoop - YARN 概述的更多相关文章

  1. Apache Hadoop YARN: 背景及概述

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

  2. 大数据及Hadoop的概述

    一.大数据存储和计算的各种框架即工具 1.存储:HDFS:分布式文件系统   Hbase:分布式数据库系统   Kafka:分布式消息缓存系统 2.计算:Mapreduce:离线计算框架   stor ...

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

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

  4. Hadoop YARN 100-1知识点

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

  5. hadoop yarn running beyond physical memory used

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

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

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

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

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

  8. 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 ...

  9. hadoop Yarn 编程API

    客户端编程库: 所在jar包: org.apache.hadoop.yarn.client.YarnClient 使用方法: 1 定义一个YarnClient实例: private YarnClien ...

随机推荐

  1. python:print含有中文的list

    Python 的 List 如果有中文的话, 会印出 \xe4\xb8... 等等的编码(如下所示), 要如何印出中文呢? >>> a = ['中文', 'ab']>>& ...

  2. Java 学习(2):java 基础概念

    Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 基础语法: 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.以 ...

  3. Introduction to the WinPcap Networking Libraries

    Introduction to the WinPcap Networking Libraries use wire shark or fiddler

  4. 【Visual Studio】Visual Studio 2015快捷键设置问题 alt+ F8 (转)

    具体修改方法如下: 工具-选项-环境-键盘-应用以下其他键盘映射方案,选择visual C++6, 然后编代码试试,嘿,我的alt+F8回来了(否则是ctrl + k, ctrl + f); 原文转自 ...

  5. Linux 设备驱动的固件加载【转】

    转自:http://blog.csdn.net/zqixiao_09/article/details/51106663 版权声明:本文为博主原创文章,未经博主允许不得转载. 作为一个驱动作者, 你可能 ...

  6. unix网络编程第一章demo

    之前一直以为time_wait状态就是主动关闭的那一方产生.然后这个端口一直不可以用.实际我发现服务端监听一个端口.客户端发来连接后.传输数据后.服务端关闭客户端套接字后.用netstat -nat ...

  7. Lua中闭包详解 来自RingOfTheC[ring.of.the.c@gmail.com]

    这些东西是平时遇到的, 觉得有一定的价值, 所以记录下来, 以后遇到类似的问题可以查阅, 同时分享出来也能方便需要的人, 转载请注明来自RingOfTheC[ring.of.the.c@gmail.c ...

  8. Linux 之 文件压缩解压

    文件压缩解压 参考教程:[千峰教育] 命令: gzip: 作用:压缩文件,只能是单个文件,不能是多个,也不能是目录. 格式:gzip file 说明:执行命令会生成file.gz,删除原来的file ...

  9. Python Challenge 第五关

    进入第五关,一张图和一行提示: pronounce it.右键源代码,只有一行注释: <!-- peak hell sounds familiar ? --> peak hell 听起来熟 ...

  10. 遍历删除List中的元素,会报错?

    经常会碰到遍历集合,然后删除里面的对象报错, 纠结半天, 百度了一下,有大神说不能用for-each,  for , 只能用迭代器,真的吗?  我就删成功了呢,看代码,请大神们指正! public s ...