YARN/MRv2 MRAppMaster深入剖析—概述
网址: http://dongxicheng.org/mapreduce-nextgen/yarn-mrappmaster-introduction/
1. 什么是MRAppMaster?
我们知道,在MRv1中,JobTracker存在诸多问题,包括存在单点故障,扩展受限等,为了解决这些问题,Apache对MRv1进行了改进,提出了YARN,YARN将JobTracker中的作业控制和资源管理两个功能分开,分别由两个不同的进程处理,进而解决了原有JobTracker存在的问题。经过架构调整之后,YARN已经完全不同于MRv1,它已经变成了一个资源管理平台,或者说应用程序管理框架。运行于YARN之上的计算框架不只限于MapReduce一种,也可以是其他流行计算框架,比如流式计算、迭代式计算等类型的计算框架。为了将一个计算框架运行于YARN之上,用户需要开发一个组件—ApplicationMaster。作为一个开始,YARN首先支持的计算框架是MapReduce,YARN为用户实现好了MapReduce的ApplicationMaster,也就是本文要介绍了MRAppMaster。
2. 相比于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实现,因此,在此只分析任务控制。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的内部实现原理。
原创文章,转载请注明: 转载自 董的博客
本文链接地址: http://dongxicheng.org/mapreduce-nextgen/yarn-mrappmaster-introduction/
作者: Dong,作者介绍: http://dongxicheng.org/about/
Copyright © 2012
This feed is for personal, non-commercial use only.
The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:
)