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. Android(java)学习笔记222:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例的优化:请求码和结果码)

    1.开启界面获取返回值 (1)采用一种特殊的方式开启Activity:               startActivityForResult(intent , 0): (2)在被开启的Activi ...

  2. 《CODE》讲了什么?

    本书首先从黑夜中用手电筒开关灯的方式来与小伙伴交流从而引出了编码与组合的概念,并阐明了编码的本质就是交流,是一种用来在机器与人之间传递信息的方式.然后在第 2~3 章中讲述了编码与组合的应用,如电报机 ...

  3. mac 卸载java

    由于电脑上的jdk版本和项目组使用的版本不一致,因此需要卸载,但是作为一个新人小白加没有使用mac的过多经验,还是稍微费了一些些功夫的,从网上查的资料,终于解决这个问题,因此记录一下. 参考博客:ht ...

  4. EXCEL表格常用函数使用的难点

    1.  INDIRECT(ref_text,逻辑值) 返回由文本字符串指定的引用.此函数立即对引用进行计算,并显示其内容.ref_text,文本引用说明, (1) A1-样式的引用(逻辑值,T,缺省) ...

  5. HDU5348

    题意:给一个无向图,让你指定边的方向,比如a→b为1,a←b为0,在给所有边指定方向后,对无向图上的每个顶点,如果满足|出度-入度|<2,那么输出一种方案. 思路:从结论入手,|出度-入度|&l ...

  6. MySQL中TIMESTAMP和DATETIME区别

    1.两者的存储方式不一样 TIMESTAMP:把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储.查询时,将其又转化为客户端当前时区进行返回. DATETIME:不做任何改变,基本上是原 ...

  7. (Excel导出失败)检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失

    在DCOM 中不存在WORD.EXCEL等OFFICE组件   最近在做一个关于office转存PDF的Web项目.开发过程一切顺利. 起初在网上找到一些Word,PPT转PDF的代码.很好用.一切顺 ...

  8. android - 模拟器连接本地tomcat

    在使用android真机试图连接本地的tomcat的时候,发现一直没有反应.网上搜了很多资料,加上自己不断测试,后来发现模拟器访问tomcat的时候,ip的概念跟在pc上访问tomcat用的ip,根本 ...

  9. Linux和windows下清除svn保存的账号密码信息

    linux是什么用户登录就是什么用户的home下,如root用户就是/root,如果xiangdong就是/home/xiangdong 用Svn时会有一种需求是需要换个帐号测试一下什么的,但往往有缓 ...

  10. iOS几种简单有效的数组排序方法

    第一种,利用数组的sortedArrayUsingComparator调用 NSComparator ,obj1和obj2指的数组中的对象 NSComparator cmptr = ^(id obj1 ...