现在的位置: 首页 > 综合 > 正文

Hadoop0.23.0初探7—使用Yarn构建属于自己的编程模型

2013年09月28日 ⁄ 综合 ⁄ 共 2359字 ⁄ 字号 评论关闭

Hadoop0.23中将Yarn作为底层资源管理平台,使用Application MasterRM交互实现了作业逻辑与资源管理的分离,让一个分布式平台可以同时支持不同的作业逻辑,解决了单一MapReduce编程模型局限性、及扩展性的问题。然而,Yarn是如何支持MapReduce编程模型;它与之前版本的Hadoop运行时环境有何区别;Yarn提供了哪些特殊的功能,辅助设计人员能够快速开发满足不同需求的数据处理框架。通过对于这些问题的解读,能够让我们更加深入理解Yarn的架构和设计的初衷,也为用户提供了为应用定制编程模型的方法。

本文会首先介绍Yarn上如何支持MapReduce编程模型,然后再阐述在Yarn上构建的编程模型和运行时环境的方法,最后总结使用Yarn构建分布式系统的一些高级特性。

Yarn支持MapReduce编程模型

    
经过对编程模型的分析,编程模型是由作业执行逻辑、数据组织方式以及中间数据传输模式三个部分确定。Hadoop1.0版本,运行时环境和编程模型紧耦合,也就是编程模型这三部分全部耦合在分布式执行框架中,因此,原Hadoop框架对于MapReduce的处理逻辑固定为map->sort->shuffle->reduce的过程,执行任务分为MapTaskReduceTask。为了对比Hadoop1.0Yarn支持MapReduce编程模型的不同,我们在下文中分别介绍这两种方式。

Hadoop1.0版本支持MapReduce编程模型的方式

     HadoopJT-TT体系架构,JobSubmitter利用RPC
proxy
调用JobTracker实现的JobSubmissionProtocol接口,提交作业到JobTracker,在与TaskTracker的心跳交互过程中实现任务的分配和调度。

Hadoop0.23.0初探7---使用Yarn构建属于自己的编程模型(上)

 

下面以一个作业的生命周期为主线,介绍Hadoop1.0运行时环境如何支持一个MR作业的执行。

(1)      
JobClient初始化作业。根据用户和系统的配置,创建作业相关的JobConf信息,为作业创建临时工作目录,对输入数据集进行切分,确定MapTask的个数,拷贝相关文件到JobTracker指定的文件系统。经过JobClient的初始化过程,作业执行的环境、和作业执行的相关信息已经准备就绪。

(2)      
JobTrackerTaskTracker交互过程,调度作业内子任务,维护作业和任务状态信息。

Hadoop0.23.0初探7---使用Yarn构建属于自己的编程模型(上)

 JobInProgress维护了每一个作业的生命周期,它定义作业的4类子任务,分别为setupmapsreducescleanupTaskTrackerJobTracker发送心跳信息,包含节点资源状况、以及部署到TaskTracker上任务执行状况的信息。TaskSchedulerassignTasks(TaskTracker)JobInProgress获得子任务,与TaskTracker进行条件匹配(例如Data-LocalRack-Local等),选出的任务以及对于作业的清理工作会被封装成Action,作为JTTT心跳调用的返回信息。

 

(3)      
TT执行子任务。TaskRunner的个数是系统之前配置的Map-slotReduce-slot个数决定的。根据TaskRunner执行任务的状况,TT会及时向JT反馈结果。

 

总结一下,Hadoop1.0使用JobInProgressJobTracker维护的作业和任务的状态解析MapReduce作业,MapReduce编程模型被紧耦合在运行时环境中。

Yarn支持MapReduce编程模型的方式

Yarn是支持编程模型可扩展的分布式资源平台。Yarn维护NM节点内资源的状态信息,负责NM节点资源的申请与释放,YarnContainer为资源分配和使用的基本单位,配置资源使用的阈值,保证资源使用不越界。Yarn中提交的每一个作业对应一个Application,在RM-NM中创建AM执行作业逻辑控制,维护整个作业生命周期内任务的调度、资源申请等操作。MapReduceAM实例由org.apache.hadoop.mapreduce.v2.app.MRAppMaster类来指定。它的启动过程和一般的ApplicationMaster启动过程类似,如下图所示。

 

Hadoop0.23.0初探7---使用Yarn构建属于自己的编程模型(上)

MR作业生命周期内,MRAppMaster负责作业的管理工作,执行流程如下图所示。

Hadoop0.23.0初探7---使用Yarn构建属于自己的编程模型(上)

上图经过TaskAttempt一旦分配到Container,会在Container内启动MapTaskImpl或者ReduceTaskImpl,从而启动mapreduce过程。至此,Yarn就可以支持MapReduce编程模型了。

    Yarn支持MapReduce编程模型,是将MapReduce作业内任务状态的维护和调度控制交由MRAppMaster实现。MRAppMasterHadoop1.0JobTracker对比关系如下。

 

 

Hadoop1.0

Hadoop-Yarn

调度过程

TT-JT心跳互联,JobClient提交作业,通过JobInProgressTaskScheduler,完成任务与TT匹配和启动。

org.apache.hadoop.mapreduce.v2.

app.rm.RMContainerAllocator负责作业内任务和Container的匹配过程。

 

资源单位

Slot

Container

整体执行流程

中心控制模式

状态机模式

ps:该文字涉及了博主毕业论文的内容,请大家引用时,注明文字来源。如果对上文内容感兴趣,请留言或者发邮件,谢谢大家对于Hadoop0.23.0初探系列文章的支持。

抱歉!评论已关闭.