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

最新文章

  1. Discuz门户首页关键词和描述显示“首页”的解决方法
  2. iscroll5 上拉,下拉 加载数据
  3. jquery.validate.js的remote用法
  4. JMeter学习-016-思路篇之-山重水复柳暗花明
  5. Unity3D 通用提示窗口实现分析(Inventory Pro学习总结)
  6. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.9.Progressbar控件
  7. 如何在oracle中导入dmp数据库文件
  8. 【自动化测试】Selenium 下载文件
  9. Java核心 --- 注解
  10. tr设置border无效的解决方法
  11. Hive的安装配置
  12. Maven转化为Dynamic Web Module
  13. 门控开关项目--使用Multism仿真
  14. Java 上传下载的
  15. C语言通过函数参数不能带出动态内存的例子。
  16. UART、SPI和I2C详解
  17. unity 安装破解提示partern not found和tutorials学习
  18. Jaxb对xml报文头的小修小改
  19. Java使用UDP发送数据到InfluxDB
  20. 洛谷 P2894 [USACO08FEB]酒店Hotel-线段树区间合并(判断找位置,不需要维护端点)+分治

热门文章

  1. pssh安装和使用
  2. Eclipse打开javadoc框
  3. 【算法】转载:Iterative vs. Recursive Approaches
  4. 【高可用HA】Apache (3) —— Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_proxy
  5. java多线程面试题整理及回答
  6. C/C++-中的sort排序用法
  7. ASP.NET四种页面导航方式之比较与选择
  8. jQuery源码分析-jQuery中的循环技巧
  9. WordCount示例深度学习MapReduce过程
  10. thinkphp 无限级分类的思想 分析