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

MapReduce On Yarn和MapReduce程序区别 MapReduce On Yarn(由专业人员开发)
1 为MapReduce作业运行在YARN上提供一个通用的运行时环境
2 需要与Yarn的各个服务交互(包括ResourceManager,NodeManager),完成较为复杂的功能(比方资源申请,跟对应的NodeManager通信启动任务)
3 由客户端和ApplicationMaster两部分组成。
备注:
通常不需要开发,因为MapRed Storm, Spark等都提供了已经写好了组件。
但是如果有新的运行框架,需要运行在yarn上,则需要自己编写配套的组件了。
对开发者要求:
1 只能用java开发
2 熟悉hadoop RPC原理及使用方法
3 熟悉分布式系统调试方法 MapReduce程序(由普通用户开发)
1 用户使用编程API(包括新旧两种)编写的应用程序
2 由Mapper,Reducer,Combiner等组件构成
3 程序提交到YARN上后,将由已经写好的ApplicationMaster服务对其进行分解和调度 如何编写一个MapReduce On Yarn呢?开发流程(如图所示) 备注:
用户需要开发的是Client和Application Master
client需要与ResourceManager和ApplicationMaster<=>交互<=>
ApplicationMaster与ResourceManager和NodeManager<=>交互<=> 这中间需要三个Hadoop RPC协议
ApplicationClientProtocol:这个是client与ResourceManager RPC通信的协议
Client通过该协议将应用程序提交到ResourceManager上,查询应用程序的运行状态或者杀死应用程序等 ApplicationMasterProtocol:ApplicationMaster与NodeManager
ApplicationMaster使用该协议向ResourceManager注册,申请资源,获取各个任务运行情况等。 ContainerManagmentProtocol:ApplicationMaster与ResourceManager
ApplicationMaster使用该协议要求NodeManager启动/撤销Container,或者查询Container的运行状态。 假设client和AppMaster已经开发完毕:
第一步 client内部会将依赖的jar包传送到hdfs
第二步 将作业提交到ResourceManager
第三步:ResourceManager收到作业后启动你所写的ApplicationMaster,由你的main函数来执行,通信Resourcemanager申请资源,申请到资源后再跟nodemanager通信来启动task 客户端设计流程(2个步骤)
步骤1:Client通过RPC函数
ApplicationClientProtocol#getNewApplication从ResourceManager中获取唯一的Application ID
步骤2:Client通过RPC函数
填充一定应用程序的信息:比如ApplicationMaster需要多少资源,ApplicationMaster运行jar包是什么,启动命令是什么等等
ApplicationClientProtocol#submitApplication【所有信息都封装在这个参数里】将ApplicationMaster提交到ResourceManager上。

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函数
【不断的申请资源,不断的启动task,最后所有的task都运行完了】
ApplicationMasterProtocol#finishApplicationMaster告诉ResourceManager应用程序执行完毕,并退出。
【这时候Resourcemanager就会把Applicationmaster的信息从内存中抹掉】

二,AM与NM交互 [以下的第一和第二部是同时执行的]
1,ApplicationMaster将申请到的资源二次分配给内部的任务,并通过RPC函数ContainerManagementProtocol#startContainer与对应的
NodeManager通信以启动Container(【顺便告诉NodeManager,这个Container,,,,,包含任务描述,资源描述等信息)
【比方拿到了1个cpu,1G内存,这里面有10个任务,到底分配给哪个任务呢,有一定的调度策略,这个也要由你实现,比方设计成随便分配给某个任务,或者具有本地性的任务】
2,ApplicationMaster可通过RPC函数
ContainerManagementProtocol#getContainerStatus向NodeManager询问Container运行状态,一旦发现某个Container运行失败【是有Applicationmaster发现,而不是Resourcemanager发现】,ApplicationMaster
可尝试重新为对应的任务申请资源
3,一旦一个Container运行完成后,ApplicationMaster可以通过RPC函数ContainerManagementProtocol#stopContainer释放Container
【】

YARN应用程序开发流程(类似于MapReduce On Yarn)本内容版权归(小象学院所有)的更多相关文章
- flask实战-留言板-Web程序开发流程
Web程序开发流程 在实际的开发中,一个Web程序的开发过程要设计多个角色,比如客户(提出需求).项目经理(决定需求的实现方式).开发者(实现需求)等,在这里我们假设自己是一个人全职开发.一般来说一个 ...
- 小议common lisp程序开发流程 - Ever 17 - 博客频道 - CSDN.NET
小议common lisp程序开发流程 - Ever 17 - 博客频道 - CSDN.NET 小议common lisp程序开发流程 分类: lisp 2011-04-17 20:59 1316人阅 ...
- IOS应用程序开发流程
应用程序开发流程 1.IOS开发需要思考的问题 用户是谁?不同应用程序的内容和用户体验大不相同,这取决于想要编写的是什么应用程序,它可能是儿童游戏,也可能是待办事项列表应用程序,又或者是测试自己学习成 ...
- YARN应用程序开发和设计流程
从业务的角度看,一个应用需要分两部分进行开发,一个是接入YARN平台,实现3个协议,通过YARN实现对集群资源的访问和利用:另一个是业务功能的实现,这个与YARN本身没有太大关系.下面主要阐述如何将一 ...
- Yarn应用程序运行流程剖析
Yarn(Yet Another Resource Negotiator)是一个Hadoop集群资源管理系统,Hadoop2时被引入,旨在提高MapReduce的性能,但YARN已足够通用,使得它可以 ...
- 微信小程序开发流程
2017年1月9日,张小龙在2017微信公开课Pro上发布的小程序正式上线,一夜之间,小程序可谓家喻户晓,但通过接下来的几个月的观察,微信小程序并没有想象中的那么火爆.进入4月以来,微信小程序团队进行 ...
- 商业版微信小程序开发流程
一.产品阶段 ①功能规划思维导图——产品经理了解清楚整个项目需求,产出清晰明确的功能需求说明. ②需求报价预算——产品经理确定好功能需求后,输出整个项目开发的报价方案. ③组建技术开发团队——初步确认 ...
- Spark应用程序开发流程
配置文件: pom.xml <properties> <scala.version>2.11.8</scala.version> <spark.version ...
- django最小程序开发流程
1.建立工程 在工程目录下打开cmd,输入以下命令.其中mysite是项目名称. django-admin startproject mysite 命令运行完后,在该目录下会出现一个名为mysite的 ...
随机推荐
- JAVA-应用easyui
easyui下载地址:http://www.jeasyui.com/index.php 现在还easyui之后将其解压,解压之后将文件夹中的文件除了demo文件夹之外的文件放入到Eclipse的web ...
- Linux下jvm、tomcat、mysql、log4j优化配置笔记[转]
小菜一直对操作系统心存畏惧,以前也很少接触,这次创业购买了Linux云主机,由于木有人帮忙,只能自己动手优化服务器了.... 小菜的云主机配置大致为:centeos6(32位),4核心cpu,4G内存 ...
- NodeJs读取源代码使用的字符集
今天用NodeJs写了个简单的客户端/服务器程序,并让客户端向服务器发送汉字.当在Windows上执行客户端时,发现服务器端打印的接收到的数据是乱码.后来发现Windows上的客户端文件的储存编码方案 ...
- ARCGIS二维三维互动
当对三维模型进行操作时(如导航.平移)二维地图自动跟进. private void Synckron() { m_pGlobe = this._GlobeControl.Globe; m_pMap = ...
- Class Fxp\Composer\AssetPlugin\Repository\NpmRepository does not exist
使用 composer 安装 laravel 时报错, 如下: [ReflectionException] Class Fxp\Composer\AssetPlugin\Repository\NpmR ...
- jquery.qrcode和jqprint的联合使用,实现html生成二维码并打印(中文也ok)
在公司的生产现场中,常常会在一些部品或设备上贴上二维码,用于扫描录入数据,免去手动输入的麻烦. 以前曾经做过winform的程序,生成二维码,并打印出来,使用的是zxing的类库, 但是如果二维码是附 ...
- 如何使用Git上传项目代码到代码服务器
如你本机新建Git项目 地址:git@github.com:yourName/yourRepo.git,远程代码库服务器地址:192.168.10.1,远程代码服务器账户名密码:admin 密码:12 ...
- C#开发的进化史
1.数据类型的进化 C#1中实现Product类型代码 public class Product { string name; public string Name { get { return na ...
- 27、Jquery 事件
Jquery 事件 在javascript中事件调用方式为onclick.onmouseover等,在jquery中 使用事件无需写前面的on bind()方法 为元素绑定事件 $("#id ...
- 计算机网络-ip地址聚合后可用的地址数
(1)59.81.1.128/28=59.81.1.1000-0000(2)59.81.1.144/28=59.81.1.1001-0000(3)59.81.1.160/28=59.81.1.1010 ...