YARN应用程序开发和设计流程

  从业务的角度看,一个应用需要分两部分进行开发,一个是接入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的核心作用就是分配资源、保证资源隔离。

时间: 2024-10-08 10:29:06

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

作业系统开发的设计流程和工具流程

以前听软件开发的老师讲的软件开发流程,也不是不以为然,只是觉得常规套路没太往心里去. 最近开始考虑开发的问题才意识到,学了这么多技术,de了这么久的bug最后拿到一个issue手还很生. 为什么要功能分析技术分析?为什么要把工序分出先后?这是我拿到一个看起来很简单的网站时才意识到的问题. ---------- -------------------- ------------ -------------- -------------- --------------------- | 功能分析 |

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

最近一直在看的一本书是<Android 应用程序开发权威指南>(第四版),十分推荐.书中讲到了一些用户界面设计的规范,对于初学者我认为十分有必要,在这里码给大家,希望对我们都有用. 在我们设计用户界面的时候,我们总是很多时候通过提供自定义应用资源和代码的方法来支持特定设备配置,但有一点特别需要注意的,那就是我们必须保证我们的设计方案有足够的灵活性来应对各种变化,让他们变得简单,而不是过度的挤压他们,一下是我的一些建议: 设计正常尺寸屏幕和中等分辨率的app.随着时间的推移,设备有着向更大尺寸,

Hadoop之MapReduce程序开发流程

摘要:MapReduce程序开发流程遵循算法思路.Mapper.Reducer.作业执行的步骤. 关键词:MapReduce 程序   开发流程 对于一个数据处理问题,若需要MapReduce,那么如何设计和实现?MapReduce程序基础模板,包含两个部分,一个是map,一个是reduce.map和reduce的设计取决解决问题的算法思路:而map和reduce的执行需要作业的调度. 因此,MapReduce程序开发可以遵循以下流程. 第一步:清楚问题是什么,确定解决问题的算法思路. 第二步:

嵌入式科普:基本概念,设计流程,开发特点,如何学习

本文涉及的内容较多,个人知识水平有限,如有不当之处欢迎指正. 特别鸣谢:嵌入式大神 @tofulee ,@woshizmxin 对本文给出了一些很好的意见. 何为嵌入式 嵌入式是一个比较模糊的概念,也没有很准确的解释,其实也没必要一定找出个准确的解释来,并不影响学习. 参考了网上的资料,根据我的认识,可以认为嵌入式系统是一种完全嵌入到设备内部.解决特定问题的专用计算机.我们常用的电脑被认为是通用计算机,能安装各种软件,从而解决各种不同问题:而嵌入式系统是专用计算机,只负责解决特定问题,例如控制洗

武装你的小程序——开发流程指南

前端工程本质上是软件工程的一种.软件工程化关注的是性能.稳定性.可用性.可维护性等方面,注重基本的开发效率.运行效率的同时,思考维护效率.一切以这些为目标的工作都是"前端工程化".工程化是一种思想而不是某种技术. 本篇文章你可以学到: 如何使小程序支持scss: 怎样通过gulp编译你的项目: 项目常用的模块封装: 小程序同webview之间如何优雅的进行交互: 集中式管理你的项目提高可维护性: 提升开发效率的小工具编写: 全文全部基于原生的小程序开发所阐述,各种第三方框架开发不在此列

流程管理与流程快速开发平台设计思路

1.前言 企业管理可能存在如下困惑: (1)无论如何进行分工方案的调整,依旧应对不了业务的变化,应对机制死板被动: (2)市场动态更新太快.形势复杂多变,管理漏洞百出,资源调配不合理,上下级沟通不畅影响效率: (3)流程反应速度太慢,满足不了客户需要,企业利润难以实现,流程重组乏力: (4)信息化系统烟囱林立,无法突破垂直管理壁垒: (5)没有一套适用的流程方案,难以建立优化体系,无法用有限的人力物力和时间达到最优利用 -- 咨询公司给出的方案: 企业在现代化发展中由于业务流程不合理,造成了多方

微信小程序的设计流程

微信小程序开发流程: 1.下载并安装“微信开发者工具” 2.打开微信开发者工具 (1)主文件中的app.json中可以进行页面的添加以及对整个微信小程序的整体布局,如下方代码会在pages文件夹中生成不同得页面文件 在"window"中可以进行页面的整体的布局 在创建的不同的页面文件夹中存在四个不同形式的文件,有.Wxml文件主要书写页面,wxss文件主要对页面的布局美化,js文件主要进行数据的请求 3.小程序之间的组件传值, (1)在主文件下面创建组件的文件夹components/p

餐饮行业小程序开发流程

在热爱美食的中国,餐饮是长盛不衰的行业.餐饮行业小程序开发:151-1222-4001(微/电)对于移动支付来说,最先改变的是餐饮,大大小小的餐饮店都在巨头补贴之下,参与移动支付大战.移动支付带来的变革,不仅仅是收单方式,更是移动互联网O2O模式的改变,线上线下连接的这个概念,逐步被人接受,并在2016年的发展中推向高潮,那么旗鱼点餐又是如何通过这种模式触达餐饮行业痛点的呢? 餐饮行业有意想不到的巨大市场 据餐饮行业的调研报告显示,2014年,整个餐饮业的O2O市场规模接近千亿,占餐饮行业总体比

Swing程序最佳架构设计—以业务对象为中心的MVC模式(转)

前言: 我打算写一系列关于Swing程序开发的文章.这是由于最近我在做一个Swing产品的开发.长期做JavaEE程序,让我有些麻木了.Swing是设计模式的典范,是一件优雅的艺术品,是一件超越时代的产品! 有机会作Swing软件的开发,让我非常有感觉! 呵呵,希望有机会能够用Java3D编写软件,那种感觉一定更棒! Java和Swing都是杰作.我这个人对别人一向很挑剔的,能够得到我由衷地赞誉,可想而知它们有多优秀了.奇怪的是,它们居然一直都无法占领桌面市场.有人说这是技术的原因.我认为这应该