分享

hadoop2 YARN/Mv2中 ApplicationMaster相关问题及介绍

pig2 2014-4-7 20:11:22 发表于 问题解答 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 2 36485
本帖最后由 pig2 于 2014-4-7 20:16 编辑


ApplicationMaster是什么?


ApplicationMaster是一个框架特殊的库,对于Map-Reduce计算模型而言有它自己的ApplicationMaster实现,对于其他的想要运行在yarn上的计算模型而言,必须得实现针对该计算模型的ApplicationMaster用以向RM申请资源运行task,比如运行在yarn上的spark框架也有对应的ApplicationMaster实现,归根结底,yarn是一个资源管理的框架,并不是一个计算框架,要想在yarn上运行应用程序,还得有特定的计算框架的实现。由于yarn是伴随着MRv2一起出现的,所以下面简要概述MRv2在yarn上的运行流程。

我们知道,在MRv1中,JobTracker存在诸多问题,包括存在单点故障,扩展受限等,为了解决这些问题,Apache对MRv1进行了改进,提出了YARN,YARN将JobTracker中的作业控制和资源管理两个功能分开,分别由两个不同的进程处理,进而解决了原有JobTracker存在的问题。经过架构调整之后,YARN已经完全不同于MRv1,它已经变成了一个资源管理平台,或者说应用程序管理框架。运行于YARN之上的计算框架不只限于MapReduce一种,也可以是其他流行计算框架,比如流式计算、迭代式计算等类型的计算框架。为了将一个计算框架运行于YARN之上,用户需要开发一个组件—ApplicationMaster。作为一个开始,YARN首先支持的计算框架是MapReduce,YARN为用户实现好了MapReduce的ApplicationMaster,也就是本文要介绍了MRAppMaster。


MRv2运行流程是什么?


MRv2运行流程:

  • MR JobClient向resourceManager(AsM)提交一个job
  • AsM向Scheduler请求一个供MR AM运行的container,然后启动它
  • MR AM启动起来后向AsM注册
  • MR JobClient向AsM获取到MR AM相关的信息,然后直接与MR AM进行通信
  • MR AM计算splits并为所有的map构造资源请求
  • MR AM做一些必要的MR OutputCommitter的准备工作
  • MR AM向RM(Scheduler)发起资源请求,得到一组供map/reduce task运行的container,然后与NM一起对每一个container执行一些必要的任务,包括资源本地化等
  • MR AM 监视运行着的task 直到完成,当task失败时,申请新的container运行失败的task
  • 当每个map/reduce task完成后,MR AM运行MR OutputCommitter的cleanup 代码,也就是进行一些收尾工作
  • 当所有的map/reduce完成后,MR AM运行OutputCommitter的必要的job commit或者abort APIs
  • MR AM退出。




Yarn是一个资源管理框架还是计算框架?


在yarn上写应用程序并不同于我们熟知的MapReduce应用程序,必须牢记yarn只是一个资源管理的框架,并不是一个计算框架,计算框架可以运行在yarn上。


我们所能做的就是向RM申请container,然后配合NM一起来启动container。就像MRv2一样,jobclient请求用于MR AM运行的container,设置环境变量和启动命令,然后交由NM去启动MR AM,随后map/reduce task就由MR AM全权负责,当然task的启动也是由MR AM向RM申请container,然后配合NM一起来启动的。所以要想在yarn上运行非特定计算框架的程序,我们就得实现自己的client和applicationMaster。另外我们自定义的AM需要放在各个NM的classpath下,因为AM可能运行在任何NM所在的机器上。


已有(2)人评论

跳转到指定楼层
pig2 发表于 2014-4-7 20:15:28
本帖最后由 pig2 于 2014-4-7 20:17 编辑


相比于JobTracker,MRAppMaster有什么不同?
既然MRAppMaster是由JobTracker衍化而来的,那么是否将JobTracker的代码稍加修改,就变成了MRAppMaster呢,答案是否定的。事实上,YARN仅重用了MRv1中的少许代码,基本可看做重写了MRAppMaster。

YARN采用了新的软件设计思想,包括对象服务化、事件驱动的异步编程模型的。作为YARN的一部分,MRAppMaster的实现也采用了这些设计思想。

下面简要介绍一下MRAppMaster的实现细节。

在正式介绍MRAppMaster之前,我们先回顾一下MRv1的实现。我们都知道,MRv1主要由两种服务组成,即:JobTracker和TaskTracker,而在YARN中,TaskTracker已经由NodeManager代替,因此,我们在此重点分析JobTracker。JobTracker包含资源管理和作业控制两个功能,在YARN中,作业管理由ResourceManager实现,因此,只剩下作业控制这一个功能(由MRAppMaster实现)。MRv1中每个作业由一个JobInProgress控制,每个任务由一个TaskInProgress控制,由于每个任务可能有多个运行实例,因此,TaskInProgress实际管理了多个运行实例Task Attempt,对于每个运行实例,可能运行了一个MapTask或者ReduceTask,另外,每个Map Task或者Reduce Task会通过RPC协议将状态汇报给TaskTracker,再由TaskTracker进一步汇报给JobTracker。
在MRAppMaster中,它只负责管理一个作业,包括该作业的资源申请、作业运行过程监控和作业容错等。MRAppMaster使用服务模型和事件驱动的异步编程模型对JobInProgress和TaskInProgress进行了重写(分别对应JobImpl和TaskImpl),并让Map Task和Reduce Task(Map Task和Reduce Task重用了MRv1中的代码)直接通过RPC将信息汇报给MRAppMaster。此外,为了能够运行于YARN之上,MRAppMaster还要与ResourceManager和NodeManager两个新的服务通信(用到两个新的RPC协议),以申请资源和启动任务,这些都使得MRAppMaster完全不同于JobTracker。
在接下来几篇文章中,我将重点剖析MRAppMaster的内部实现原理。


回复

使用道具 举报

hrj294055233 发表于 2016-6-24 11:29:44
jobtracker拆成了resoucemanager和applicationmaster两大块,那jps的时候applicationmaster会显示这个进程吗? 我操作下来是显示不出来,也不知道是不是?求指教
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条