YARN应用程序开发流程(类似于MapReduce On Yarn)本内容版权归(小象学院所有)
2014-04-02 15:20
423 查看
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 【】
相关文章推荐
- 面向MapReduce 的数据处理流程开发方法 ------------重点内容摘要
- HADOOP 2.0 YARN应用程序的执行流程和开发
- YARN应用程序开发和设计流程
- MapReduceOnYarn(iMapReduce在Yarn执行的流程分享)
- 使用 Ruby on Rails 和 Eclipse 开发 iPhone 应用程序,第 1 部分:为 iPhone 提供内容
- 使用 Ruby on Rails 和 Eclipse 开发 iPhone 应用程序之 2 :向客户端显示 iPhone 内容
- spark on yarn(Job的运行流程,可以对比mapreduce的yarn运行)
- 使用 FileNet Content API 开发以内容为核心的流程
- Spark on Yarn解密及运行流程
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程
- iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-6-25日更新iap恢复详解】
- Spark On Yarn:提交Spark应用程序到Yarn
- Spark On Yarn 详细配置流程
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-6-25日更新iap恢复详解】
- YARN应用程序的开发步骤
- 基于VisualC++2010开发Windows7杀毒应用程序范例(3)---检测所有驱动程序,并启动,暂停,终止驱动
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】
- android开发(16) 遍历所有的已经安装的应用程序,启动其他的应用程序
- Yarn源码分析之MapReduce作业中任务Task调度整体流程(一)
- MapReduce总结,不考虑yarn的工作流程。