您的位置:首页 > 运维架构

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是一个资源管理系统,负责整个集群资源的管理和分配。如果需要在一个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日 [译]下一代的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中读取不同格式的文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息