从业务的角度看,一个应用需要分两部分进行开发,一个是接入YARN平台,实现3个协议,通过YARN实现对集群资源的访问和利用;另一个是业务功能的实现,这个与YARN本身没有太大关系。下面主要阐述如何将一个应用接入YARN平台。

YARN开发流程包括Client和ApplicationMaster的开发。

YARN主要由ResourceManager和NodeManager组成,ResourceManager负责资源的管理与分配,NodeManager则负责具体资源的隔离。YARN中,资源使用容器进行封装。用户在YARN上开发应用时,需要实现如下三个模块:

  • Application Client: 应用客户端用于将应用提交到YARN上,使应用运行在YARN上,同时,监控应用的运行状态,控制应用的运行;

  • Application Master: AM负责整个应用的运行控制,包括向YARN注册应用、申请资源、启动容器等,应用的实际工作在容器中进行;

  • Application Worker: 应用的实际工作,并不是所有的应用都需要编写worker。NodeManager启动AM发送过来的容器,容器内部封装了该应用worker运行所需的资源和启动命令。

实现上述模块,涉及如下3个RPC协议:

  • ApplicationClientProtocol: Client-RM之间的协议,主要用于应用的提交;

  • ApplicationMasterProtocol: AM-RM之间的协议,AM通过该协议向RM注册并申请资源;

  • ContainerManagementProtocol: AM-NM之间的协议,AM通过该协议控制NM启动容器。

   第一部分:Client的开发【主要作用是提交(部署)应用和监控应用运行两个部分】

客户端设计流程(4个步骤)

步骤1:Client通过RPC函数ApplicationClientProtocol# getNewApplication从ResourceManager中获取唯一的Application ID。

步骤2:Client通过RPC函数ApplicationClientProtocol# submitApplication【所有信息都封装在这个参数里】将ApplicationMaster提交到ResourceManager上。
填充一定应用程序的信息:比如ApplicationMaster需要多少资源,ApplicationMaster运行jar包是什么,启动命令是什么等等。 步骤3:RM根据ApplicationSubmissionContext上封装的内容启动AM。
步骤4:客户端通过AM或RM获取应用的运行状态,并控制应用的运行过程。

第二部分:ApplicationMaster的编写分两步,每一步分三个步骤:
一、AM与RM交互【主要是来申请资源】
1、ApplicationMaster通过RPC函数ApplicationMasterProtocol# registerApplicationMaster向ResourceManager注册;
【注册的时候会告诉ResourceManager自己的ip端口】
【注册完成后会返回一些信息:比如你这个Applicationmaster最多可以获取多少资源,你的token是什么,】 2、ApplicationMaster通过RPC函数ApplicationMasterProtocol# allocate向ResourceManager申请资源(以Container形式表示);
【allocate是一个RPC函数,ApplicationMaster启动后,已经知道内部有多少个task,每个task需要多少资源,会进行汇总,通过allocate向ResourceManager申请资源】
【allocate申请资源后,会周期性的调用allocate函数,第一:心跳,告诉Resourcemanager我还活着,第二:allocate每次调用后ResourceManager都会返回一些信息给你
比方说:你新申请到一些资源。 】
【你需要不断的探测,有没有得到新的资源】
【同时如果一些task死掉了,ResourceManager也会通过allocate告诉你】
【如果你不断的申请资源,申请到资源之后呢,ApplicationMaster会与Nodemanageer通信来启动对应的task】 3、ApplicationMaster通过RPC函数ApplicationMasterProtocol# finishApplicationMaster告诉ResourceManager应用程序执行完毕,并退出。
【不断的申请资源,不断的启动task,最后所有的task都运行完了】
【这时候Resourcemanager就会把Applicationmaster的信息从内存中抹掉】
二、AM与NM交互 【主要是启动容器、查询容器状态、停止容器,以下的第一和第二步是同时执行的】
1、ApplicationMaster将申请到的资源二次分配给内部的任务,并通过RPC函数ContainerManagementProtocol# startContainer与对应的NodeManager通信以启动Container(【顺便告诉NodeManager,这个Container,,,,,包含任务描述,资源描述等信息)
【比方拿到了1个cpu,1G内存,这里面有10个任务,到底分配给哪个任务呢,有一定的调度策略,这个也要由你实现,比方设计成随便分配给某个任务,或者具有本地性的任务】 2、ApplicationMaster可通过RPC函数ContainerManagementProtocol#g etContainerStatus向NodeManager询问Container运行状态,一旦发现某个Container运行失败【是有Applicationmaster发现,而不是Resourcemanager发现】,ApplicationMaster
可尝试重新为对应的任务申请资源 3、一旦一个Container运行完成后,ApplicationMaster可以通过RPC函数ContainerManagementProtocol# stopContainer释放Container
假设client和AppMaster已经开发完毕:
第一步 client内部会将依赖的jar包传送到hdfs
第二步 将作业提交到ResourceManager
第三步:ResourceManager收到作业后启动你所写的ApplicationMaster,由你的main函数来执行,通信Resourcemanager申请资源,申请到资源后再跟nodemanager通信来启动task。

总得来说,YARN是一个资源管理平台,并不涉及业务逻辑,具体的业务逻辑需要用户自己去实现。YARN的核心作用就是分配资源、保证资源隔离。

YARN应用程序开发和设计流程的更多相关文章

  1. 微信小程序开发的基本流程

    微信小程序开发的基本流程 一,微信小程序简介 1,微信小程序简称小程序,张小龙在微信公开课 Pro 上发布的小程序正式上线,时间是2017年1月9日. 2,微信小程序这个词可以分解为“微信”和“小程序 ...

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

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

  3. 微信小程序开发10-开发流程

    1.Flex布局 Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性.任何一个容器都可以指定为Flex布局. 2.设置容器,用于统一管理容器内项目布局,也就是管 ...

  4. 小程序开发-微信小程序开发入门

    分享一个微信小程序开发的基本流程,仅供参考. 第一步:注册微信小程序公众号,注册成功后,登录微信公众号管理后台,等待下一步操作. 第二步:进入微信小程序的后台后,下载微信内置的微信小程序开发者工具,以 ...

  5. 【文章内容来自《Android 应用程序开发权威指南》(第四版)】如何设计兼容的用户界面的一些建议(有删改)

    最近一直在看的一本书是<Android 应用程序开发权威指南>(第四版),十分推荐.书中讲到了一些用户界面设计的规范,对于初学者我认为十分有必要,在这里码给大家,希望对我们都有用. 在我们 ...

  6. flask实战-留言板-Web程序开发流程

    Web程序开发流程 在实际的开发中,一个Web程序的开发过程要设计多个角色,比如客户(提出需求).项目经理(决定需求的实现方式).开发者(实现需求)等,在这里我们假设自己是一个人全职开发.一般来说一个 ...

  7. IOS应用程序开发流程

    应用程序开发流程 1.IOS开发需要思考的问题 用户是谁?不同应用程序的内容和用户体验大不相同,这取决于想要编写的是什么应用程序,它可能是儿童游戏,也可能是待办事项列表应用程序,又或者是测试自己学习成 ...

  8. Yarn应用程序运行流程剖析

    Yarn(Yet Another Resource Negotiator)是一个Hadoop集群资源管理系统,Hadoop2时被引入,旨在提高MapReduce的性能,但YARN已足够通用,使得它可以 ...

  9. 小议common lisp程序开发流程 - Ever 17 - 博客频道 - CSDN.NET

    小议common lisp程序开发流程 - Ever 17 - 博客频道 - CSDN.NET 小议common lisp程序开发流程 分类: lisp 2011-04-17 20:59 1316人阅 ...

随机推荐

  1. FileZilla server windows 2003系统下适用的版本

    最新版的FileZilla server 在windows 2003系统下已经不能用了 http://files.cnblogs.com/files/airoot/FileZilla_Server-0 ...

  2. printf家族探秘

    有一个函数,是我们从学习c语言就开始的第一天就接触的,那就是printf函数,可是这个家族的函数,带给我们的便利却不是一点半点,所以写一篇用法总结. 1.printf函数 格式化输出,可以输出八进制, ...

  3. 在input中回车后页面提交导致出现HTTP 错误 405.0 - Method Not Allowed

    前些时间在做一个搜索功能时发现一个比較有意思的现象,场景是这种:在一个模态窗体中是一个订单列表.页面的顶部有若干个状态筛选框和一个搜索keyword输入框,当焦点在keyword输入框时按回车,本来是 ...

  4. json demo

    package my.bigdata.movieTask.action; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.J ...

  5. 【JS】通过JS实现超市小票打印功能——ActiveX控件

    应客户的需求= = ,要在网页端实现打印小票的功能 先来一张打印出的小票效果图(合计明显不对,因为有修改订单功能,请各位忽略) 用什么方法实现呢: 我想应该是有三种吧 1.用第三方的浏览器控件(这个好 ...

  6. ubuntu 16.04 上opengl 的安装以及例子程序编译执行

    因为最近在移植 Qt5.7 + opengl , 遇到了难以越过的山峰,没有办法,试着在 ubuntu 16.04上将 opengl 配置以下,记录: 安装相关的库: sudo apt-get ins ...

  7. contiki rpl

    Linking target: udp-client-temperature.stk3700arm-none-eabi-gcc -Xlinker -Map=udp-client-temperature ...

  8. JavaScrip——对话框的简单应用(判断isNaN)

    综合运用 isNaN的用法:判断是不是一个合法的数字类型,是数字返回false,不是返回true 1.我们用prompt来接收输入的内容 2.通过isNaN来做判断 3.最后用alert输出结果 &l ...

  9. PHP无限极分类 - 3 - 分类目录

    结合zui---Tree组件,实现分类目录. 目录结构同上一篇: 效果: 代码: <!DOCTYPE html> <html lang="en"> < ...

  10. 受打击了:你是学.net 的吧?

    我在网上投了简历,今天去面试, 去到才知道有面试题做,做完之后自知答的很烂. 没想到面试我的那个人,一开始就很直接,说: 我感觉你很喜欢用英语, 但英语很烂 我觉得你很喜欢用别人的东西, 但技术水平很 ...