Hadoop0.23中将Yarn作为底层资源管理平台,使用Application Master与RM交互实现了作业逻辑与资源管理的分离,让一个分布式平台可以同时支持不同的作业逻辑,解决了单一MapReduce编程模型局限性、及扩展性的问题。然而,Yarn是如何支持MapReduce编程模型;它与之前版本的Hadoop运行时环境有何区别;Yarn提供了哪些特殊的功能,辅助设计人员能够快速开发满足不同需求的数据处理框架。通过对于这些问题的解读,能够让我们更加深入理解Yarn的架构和设计的初衷,也为用户提供了为应用定制编程模型的方法。
本文会首先介绍Yarn上如何支持MapReduce编程模型,然后再阐述在Yarn上构建的编程模型和运行时环境的方法,最后总结使用Yarn构建分布式系统的一些高级特性。
Yarn支持MapReduce编程模型
经过对编程模型的分析,编程模型是由作业执行逻辑、数据组织方式以及中间数据传输模式三个部分确定。Hadoop1.0版本,运行时环境和编程模型紧耦合,也就是编程模型这三部分全部耦合在分布式执行框架中,因此,原Hadoop框架对于MapReduce的处理逻辑固定为map->sort->shuffle->reduce的过程,执行任务分为MapTask和ReduceTask。为了对比Hadoop1.0和Yarn支持MapReduce编程模型的不同,我们在下文中分别介绍这两种方式。
Hadoop1.0版本支持MapReduce编程模型的方式
proxy调用JobTracker实现的JobSubmissionProtocol接口,提交作业到JobTracker,在与TaskTracker的心跳交互过程中实现任务的分配和调度。
下面以一个作业的生命周期为主线,介绍Hadoop1.0运行时环境如何支持一个MR作业的执行。
(1)
JobClient初始化作业。根据用户和系统的配置,创建作业相关的JobConf信息,为作业创建临时工作目录,对输入数据集进行切分,确定MapTask的个数,拷贝相关文件到JobTracker指定的文件系统。经过JobClient的初始化过程,作业执行的环境、和作业执行的相关信息已经准备就绪。
(2)
JobTracker与TaskTracker交互过程,调度作业内子任务,维护作业和任务状态信息。
(3)
TT执行子任务。TaskRunner的个数是系统之前配置的Map-slot、Reduce-slot个数决定的。根据TaskRunner执行任务的状况,TT会及时向JT反馈结果。
总结一下,Hadoop1.0使用JobInProgress和JobTracker维护的作业和任务的状态解析MapReduce作业,MapReduce编程模型被紧耦合在运行时环境中。
Yarn支持MapReduce编程模型的方式
Yarn是支持编程模型可扩展的分布式资源平台。Yarn维护NM节点内资源的状态信息,负责NM节点资源的申请与释放,Yarn以Container为资源分配和使用的基本单位,配置资源使用的阈值,保证资源使用不越界。Yarn中提交的每一个作业对应一个Application,在RM-NM中创建AM执行作业逻辑控制,维护整个作业生命周期内任务的调度、资源申请等操作。MapReduce的AM实例由org.apache.hadoop.mapreduce.v2.app.MRAppMaster类来指定。它的启动过程和一般的ApplicationMaster启动过程类似,如下图所示。
MR作业生命周期内,MRAppMaster负责作业的管理工作,执行流程如下图所示。
上图经过TaskAttempt一旦分配到Container,会在Container内启动MapTaskImpl或者ReduceTaskImpl,从而启动map、reduce过程。至此,Yarn就可以支持MapReduce编程模型了。
|
Hadoop1.0 |
Hadoop-Yarn |
调度过程 |
TT-JT心跳互联,JobClient提交作业,通过JobInProgress和TaskScheduler,完成任务与TT匹配和启动。 |
org.apache.hadoop.mapreduce.v2. app.rm.RMContainerAllocator负责作业内任务和Container的匹配过程。 |
资源单位 |
Slot |
Container |
整体执行流程 |
中心控制模式 |
状态机模式 |
ps:该文字涉及了博主毕业论文的内容,请大家引用时,注明文字来源。如果对上文内容感兴趣,请留言或者发邮件,谢谢大家对于Hadoop0.23.0初探系列文章的支持。