Yarn(Yet Another Resource Negotiator)是一个Hadoop集群资源管理系统,Hadoop2时被引入,旨在提高MapReduce的性能,但YARN已足够通用,使得它可以支持其它的分布式应用。
 
Yarn本身提供了一系列API用于用户应用程序与集群资源进行交互,这些API复杂且晦涩难懂,用户通常不会直接使用。用户编制应用程序时,通常使用的是分布式计算框架(MapReduce、Spark)提供的高层次API,这些API构建在Yarn之上且隐藏资源管理细节,如下图所示:
 
 
MapReduce、Spark、Tez这样的计算框架均以Yarn应用程序的形式运行于集群计算层(Yarn)和集群存储层(HDFS或HBase)之上,而Pig、Hive、Crunch则运行于MapReduce、Spark或Tez之上,并没有与Yarn直接交互。
 
Yarn的核心服务由两个组件提供:
 
Resource Manager:每个集群一个实例,用于管理整个集群的资源使用;
 
Node Manager:每个集群多个实例,用于自身Container的启动和监测(每个Node Manager上可能有多个Container)。
 
注:根据Yarn配置的不同,Container可能是一个Unix进程或者一个Linux cgroup实例,在受限的资源范围内(如内存、CPU等)执行特定应用程序的代码。
 
运行流程
 
 
(1)Client请求Resource Manager运行一个Application Master实例(step 1);
(2)Resource Manager选择一个Node Manager,启动一个Container并运行Application Master实例(step 2a、step 2b);
(3)Application Master根据实际需要向Resource Manager请求更多的Container资源(step 3);
(4)Application Master通过获取到的Container资源执行分布式计算(step 4a、step 4b)。
 
Application Master的具体逻辑与特定的应用相关,也许直接向Client返回计算结果,也可能请求更多的资源执行分布式计算(如step 3)。此外,Yarn本身并没有提供应用程序组件之间(Client、Master、Process)的通信实现,需要特定的应用程序自己提供,如使用Hadoop RPC。
 
资源请求
 
Yarn在资源请求方面拥有一个可扩展的模型,亦即可表述复杂的请求信息,如某个Container需要的计算资源量(内存或CPU),并可带有数据本地性约束需求。
 
数据本地性约束可以很大程度上节约分布式计算处理时的集群带宽消耗,可以表现为以下三种形式:
 
(1)请求位于集群特定节点上的Container;
(2)请求位于集群特定机架节点上的Container;
(3)请求位于集群任意节点上的Container。
 
数据本地性约束并不一定能够恰好满足,如果指定的节点无法启动新的Container(正在运行的Container已将资源耗尽),则尝试同一个机架的其它节点;如果也失败,则尝试集群中的其它节点。MapReduce场景下Map Container的分配就是这样的一种情况,通常可以粗略地认为每一个Map任务负责处理一个Block的数据,为了避免网络传输数据,应该尽可能的满足数据本地性约束,优先在存有Block Replica的节点上启动Container,次之在存有Block Replica的机架节点上启动Contaier,末之在集群中的其余节点上启动Container。
 
一个处于运行状态的Yarn应用程序可以在任何时候发起资源请求,比如应用启动时一次性请求所有资源(Spark),或者以动态的方式不断请求更多的资源满足应用的需要(MapReduce,首先请求全部的Map资源,稍后请求Reduce资源,如果某些Task失败,还会申请更多的资源用于失败恢复)。
 
应用程序生存期
 
Yarn应用程序的生存期跨度比较大:从运行几秒钟的短任务应用到运行几天甚至几月的长任务应用。相对于运行时间而言,一种更有效的方式是根据Application与Job的映射关系划分,常见以下三种情况:
 
(1)一个Application对应一个Job(MapReduce);
(2)一个Application对应一个Workflow(Session)的所有Jobs,这种方式可以在多个Jobs之间重用Containers并有效缓存中间数据(Spark);
(3)一个Long-Running  Application被多个用户共享,这种应用多数充当“Coordination”角色(Slider、Impala)。
 
构建Yarn应用程序
 
我们自己动手从头到尾构建一个Yarn应用程序是比较复杂的,很多时候也是不必要的,可以根据需要的不同选择一个优秀的分布式计算框架帮助我们构建应用程序,如需要DAG计算,则选择Spark、Tez;需要流式处理,则选择Spark、Samza或Storm。
 
也有一些开源项目帮助我们简化Yarn应用程序的构建,如Slider、Twill,目前均处于孵化器状态,暂时不讨论。Yarn本身也自带了一个例子“Distributed Shell Application”,向我们展示了如果通过Yarn Client API完成Client、Application Master与Yarn Daemons之间的交互。
 
 
 
 

Yarn应用程序运行流程剖析的更多相关文章

  1. java里的分支语句--程序运行流程的分类(顺序结构,分支结构,循环结构)

    JAVA里面的程序运行流程分三大类: 1,顺序结构:顺序结构就是依次执行每一行代码 2,分支结构:分支结构就是按不同的条件进行分支 3,循环结构:一段代码依条件进行循环执行. 其中,分支结构有两大类: ...

  2. [MapReduce_3] MapReduce 程序运行流程解析

    0. 说明 Word Count 程序运行流程解析 &&  MapReduce 程序运行流程解析 1. Word Count 程序运行流程解析 2. MapReduce 程序运行流程图

  3. IOS学习笔记1—Iphone程序运行流程

    Iphone程序运行流程 main.m文件,iOS应用程序的主入口 main函数的两个参数为命令行参数,在ios开发中不会用到这些元素,包括这两个参数是为了与标准ANSI C保持一致 UIApplic ...

  4. Python程序运行流程与垃圾回收机制

    Python程序运行流程 Python解释器首先将程序将py文件编译成一个字节码对象PyCodeObject(只存在于内存中).(当这个模块的 Python 代码执行完后,就会将编译结果保存到了pyc ...

  5. YARN应用程序开发流程(类似于MapReduce On Yarn)本内容版权归(小象学院所有)

    MapReduce On Yarn和MapReduce程序区别 MapReduce On Yarn(由专业人员开发)1 为MapReduce作业运行在YARN上提供一个通用的运行时环境2 需要与Yar ...

  6. Hadoop分布式资源管理器Yarn、MR运行机制剖析

    介绍YARN组件的功能及应用场景 1.ResourceManager(RM) RM是一个全局的资源管理器,集群中只有一个.它负责整个Hadoop系统的资源管理和分配,包括处理客户端请求.启动监控 Ap ...

  7. MFC程序运行流程

    ->进入入口函数_tWinMain() 程序首先进入文件AppModul.cpp,找到_tWinMain()函数运行,调用其中的AfxWinMain()函数. 由于为了支持UNICODE,C运行 ...

  8. .net程序运行流程

    程序员用.net开发的程序要在计算机上运行,首先程序经过编译后,会生成机器指令,一般以一个文件的形式保存,这个文件在外存储器上(存储器分外存与内存.外存:硬盘,U盘等:) 然后cpu会把硬盘上的文件读 ...

  9. C#程序运行流程

    我们写好的C#代码操作系统是如何能识别呢,我们都知道操作系统只能认识二进制 机器代码,下面用图来表示 因为C#是安全的托管代码 同时CLR会在内存中创建应用程序域 托管代码:被CLR管理的代码 非托管 ...

随机推荐

  1. nginix 笔记

    1. 一个master进程,多个worker进程,worker进程数目可自动配置为核的数目 2. 配置文件ngnix.conf存放在linux的/etc/ngnix目录下

  2. 使用 trait 时报PHP Parse error: syntax error, unexpected 'use' (T_USE) 这个错误

    找一大圈原因, 最后终于找到了, 不是PHP版本的原因[], 是自己把use 写到了类里的方法里了. 这个东东,  不能脱离类单独使用, 否则的话, 会被认为是命名空间了. 测试例子如下 // Tra ...

  3. HDU 4442 Physical Examination(关于贪心排序)

    这个题目用贪心来做,关键是怎么贪心最小,那就是排序的问题了. 加入给定两个数a1, b1, a2, b2.那么如果先选1再选2的话,总的耗费就是a1 + a1 * b2 + a2; 如果先选2再选1, ...

  4. AS 进行单元测试

    以下为本人在AndroidStudio 2.0 上实测后得出的结论,不像网上那一堆堆的误人子弟的文章,都是过时的或者根本就是不对的. 简介 和eclipse需要配置清单文件不同,AndroidStud ...

  5. eclipse开发servlet应用,Tomcat无法访问jpg图片 ===第二版===

    之前版本中,设置完后,确实可以访问图片了,但是问题接着来了,那就是,无法访问servlet的服务了. 后来想了下,原因也挺好理解的,设置到了Tomcat目录,而项目没有部署,所以没能访问. 但是怎么两 ...

  6. 怎么在后台修改前台html页面的key、title、description

    public void UpdateMeta(string title, string keyword, string desc) { ; i >= ; i--) { if (this.Head ...

  7. amCharts 破解

    官网下载 http://www.amcharts.com 然后找到amcharts.js , 打开搜索关键字 “utm_source=swf&utm_medium=demo&utm_c ...

  8. 学习日记_SSH框架web.xml配置文件篇

    1.参考一:http://www.blogjava.net/yxhxj2006/archive/2012/07/09/382632.html 2.参考二: <!-- web 容器启动spring ...

  9. iOS子线程操作UI问题检查

    iOS开发中,因为大部分函数都不是线程安全的,所以UI子线程中操作UI是非常危险的事,但是有时候因为开发者经验不足,不知道子线程中不能UI,或者知道但是写代码的时候没注意,或者不知道那些函数操作UI了 ...

  10. PHP 数据库 ODBC

    PHP 数据库 ODBC ODBC 是一种应用程序编程接口(Application Programming Interface,API),使我们有能力连接到某个数据源(比如一个 MS Access 数 ...