HADOOP 2.0 YARN应用程序的执行流程和开发
2014-02-18 12:50
309 查看
在yarn的官方文档上有一篇很经典的Hadoop
MapReduce Next Generation – Writing YARN Applications,讲述了如果编写基于hadoop 2.0 yarn的应用程序(中文翻译版)。本文主要讲述yarn程序的执行流程和如何进行开发的一点想法。
原文地址:http://www.rigongyizu.com/how-to-write-hadoop-0-23-yarn-mapreduce-and-other-applications/
Yarn是一个资源管理系统,负责整个集群资源的管理和分配。如果需要在一个yarn集群上运行程序:
首先得有个客户端client来提交job到ResourceManager(RM)申请资源。Client通过RMProtocol协议来与RM通信,将应用程序运行所需的一些信息,比如local file/jars,执行的命令,参数,环境变量等提供给RM来运行应用的第一个container也就是ApplicationMaster(AppMaster)。
如果申请到了资源,RM就在第一个container上启动AppMaster。AppMaster然后通过AMRMProtocol协议与ResourceManager通讯,注册自身,然后继续申请资源。
如果获得了containers,AppMaster会通过ContainerManager类与NodeManager通信,为任务启动container。AppMaster同时也会提供启动container需要的一些信息,比如命令行,环境变量等。任务完成后,AppMaster会通过AMRMProtocol::finishApplicationMaster来通知RM任务完成。同时,client可以通过查询RM来获取job的状态信息,或者如果AppMaster支持也可以直接从AppMaster查询信息。如果需要,client可以通过ClientRMProtocol::forceKillApplication来kill掉application。
整个执行流程可以参考下图(来源网络):
client 即客户端,负责将应用程序提交到RM。
AppMaster 即整个应用程序的核心,负责与RM通信,申请资源,启动containers。并监控containers的执行情况,在container执行失败后做failover的处理。
container 就是具体干活的,和具体业务相关的一些处理逻辑。
ClientRMProtocol(Client<–>ResourceManager):客户端与RM通信的协议,可以启动AppMater,查询或者kill AppMaster。
AMRMProtocol(ApplicationMaster<–>ResourceManager):AppMaster与RM通信,AppMaster可以向RM注册和注销自己,也可以向RM申请资源以启动container。
ContainerManager(ApplicationMaster<–> NodeManager):AppMaster与NM通信,可以启动或者停止一个container,也可以获取container的执行状态。
编写yarn应用程序的详细步骤可以直接参考源码自带的distributed shell的例子。distributed shell是在每个节点上执行一条shell命令或者一个脚本,对于理解基本的概念还是很有帮助的。
可以看到,一个YARN应用程序的编写,大量的工作是在编写客户端和AppMaster。而AppMaster要处理资源申请,启动和监控container,尤其是container的
其实Yarn已经提供了一个可以直接使用的客户端-MRClienService和AppMaster-MRAppMater。MapReduce也只是Yarn上的一种通用的框架,所以完全可以参考MRAppMaster来实现自己的框架。如类似storm的流式计算框架,或者调度RPC Service的框架,或者支持MPI的框架。目前github上已经有类似的项目出现了,相信不久就会出现一些通用的框架。
2013年8月20日 [译]下一代的Hadoop
Mapreduce – 如何编写YARN应用程序
2013年8月11日 [译]下一代的Apache
Hadoop MapReduce : Yarn
2012年7月10日 Hadoop
MapReduce 2.0 – Yarn 学习之安装配置与运行详解
2013年11月13日 利用graphviz生成hadoop
2.0 Yarn中的MR/RM/NM状态转换图
2013年10月12日 mapreduce
job让一个文件只由一个map来处理
2013年9月23日 hadoop用MultipleInputs/MultiInputFormat实现一个mapreduce
job中读取不同格式的文件
MapReduce Next Generation – Writing YARN Applications,讲述了如果编写基于hadoop 2.0 yarn的应用程序(中文翻译版)。本文主要讲述yarn程序的执行流程和如何进行开发的一点想法。
原文地址:http://www.rigongyizu.com/how-to-write-hadoop-0-23-yarn-mapreduce-and-other-applications/
YARN程序的执行流程
Yarn是一个资源管理系统,负责整个集群资源的管理和分配。如果需要在一个yarn集群上运行程序:首先得有个客户端client来提交job到ResourceManager(RM)申请资源。Client通过RMProtocol协议来与RM通信,将应用程序运行所需的一些信息,比如local file/jars,执行的命令,参数,环境变量等提供给RM来运行应用的第一个container也就是ApplicationMaster(AppMaster)。
如果申请到了资源,RM就在第一个container上启动AppMaster。AppMaster然后通过AMRMProtocol协议与ResourceManager通讯,注册自身,然后继续申请资源。
如果获得了containers,AppMaster会通过ContainerManager类与NodeManager通信,为任务启动container。AppMaster同时也会提供启动container需要的一些信息,比如命令行,环境变量等。任务完成后,AppMaster会通过AMRMProtocol::finishApplicationMaster来通知RM任务完成。同时,client可以通过查询RM来获取job的状态信息,或者如果AppMaster支持也可以直接从AppMaster查询信息。如果需要,client可以通过ClientRMProtocol::forceKillApplication来kill掉application。
整个执行流程可以参考下图(来源网络):
三个角色
client 即客户端,负责将应用程序提交到RM。AppMaster 即整个应用程序的核心,负责与RM通信,申请资源,启动containers。并监控containers的执行情况,在container执行失败后做failover的处理。
container 就是具体干活的,和具体业务相关的一些处理逻辑。
三个RPC协议
ClientRMProtocol(Client<–>ResourceManager):客户端与RM通信的协议,可以启动AppMater,查询或者kill AppMaster。AMRMProtocol(ApplicationMaster<–>ResourceManager):AppMaster与RM通信,AppMaster可以向RM注册和注销自己,也可以向RM申请资源以启动container。
ContainerManager(ApplicationMaster<–> NodeManager):AppMaster与NM通信,可以启动或者停止一个container,也可以获取container的执行状态。
Distributed shell
编写yarn应用程序的详细步骤可以直接参考源码自带的distributed shell的例子。distributed shell是在每个节点上执行一条shell命令或者一个脚本,对于理解基本的概念还是很有帮助的。
YARN编程框架的开发
可以看到,一个YARN应用程序的编写,大量的工作是在编写客户端和AppMaster。而AppMaster要处理资源申请,启动和监控container,尤其是container的fail over,这才是真正值得关注的地方。对于大量的应用程序来说,AppMaster的工作机制可能相同,这就可以抽象出一个通用的AppMaster框架。框架的使用者只需要关心自己的具体应用逻辑即container就可以了,可以大大减少开发成本。
其实Yarn已经提供了一个可以直接使用的客户端-MRClienService和AppMaster-MRAppMater。MapReduce也只是Yarn上的一种通用的框架,所以完全可以参考MRAppMaster来实现自己的框架。如类似storm的流式计算框架,或者调度RPC Service的框架,或者支持MPI的框架。目前github上已经有类似的项目出现了,相信不久就会出现一些通用的框架。
相关文章
2013年8月20日 [译]下一代的HadoopMapreduce – 如何编写YARN应用程序
2013年8月11日 [译]下一代的Apache
Hadoop MapReduce : Yarn
2012年7月10日 Hadoop
MapReduce 2.0 – Yarn 学习之安装配置与运行详解
2013年11月13日 利用graphviz生成hadoop
2.0 Yarn中的MR/RM/NM状态转换图
2013年10月12日 mapreduce
job让一个文件只由一个map来处理
2013年9月23日 hadoop用MultipleInputs/MultiInputFormat实现一个mapreduce
job中读取不同格式的文件
相关文章推荐
- YARN应用程序开发和设计流程
- hadoop笔记3-yarn执行流程
- YARN应用程序开发流程(类似于MapReduce On Yarn)本内容版权归(小象学院所有)
- Ubuntu下eclipse开发hadoop应用程序环境配置
- hadoop jar xxxx.jar 执行的流程
- 在AE二次开发中出“正试图在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。”异常解决方案
- Hadoop基本流程与应用开发
- qtopia-2.2.0 第一个 Qt 应用程序的 --- 开发流程--- 移植到 TQ2440 开发板
- OAuth1.0/2.0版本的机制原理讲解及开发流程
- Hadoop基本流程与应用开发
- Hadoop2.0/YARN深入浅出(Hadoop2.0、Spark、Storm和Tez)
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!2012-6-25日更新iap恢复
- Java开发2.0:用Hadoop MapReduce进行大数据分析
- hadoop2.0 执行框架
- Hadoop学习6_基于hadoop2.2.0 的 hadoop2.0 yarn 总结
- 从零开始一步步教你:用C++开发一个简单的hadoop分布式计算应用程序
- Hadoop - YARN 启动流程
- Hadoop2.0、YARN技术大数据视频教程
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!
- 【hadoop2.2(yarn)】基于yarn成功执行分布式map-reduce,记录问题解决过程。