`

解析Hadoop新一代MapReduce框架Yarn

 
阅读更多

更快、更强——解析Hadoop新一代MapReduce框架Yarn

摘要:本文介绍了Hadoop 自0.23.0版本后新的MapReduce框架(Yarn)原理、优势、运作机制和配置方法等;着重介绍新的Yarn框架相对于原框架的差异及改进。

编者按:对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分布式文件存储及处理框架,对于 Hadoop 框架的介绍在此不再累述,随着需求的发展,Yarn 框架浮出水面,@依然光荣复兴的 博客给我们做了很详细的介绍,读者通过本文中新旧 Hadoop MapReduce 框架的对比,更能深刻理解新的 yarn 框架的技术原理和设计思想。 

 

背景

 

Yarn是一个分布式的资源管理系统,用以提高分布式的集群环境下的资源利用率,这些资源包括内存、IO、网络、磁盘等。其产生的原因是为了解决原MapReduce框架的不足。最初MapReduce的committer们还可以周期性的在已有的代码上进行修改,可是随着代码的增加以及原MapReduce框架设计的不足,在原MapReduce框架上进行修改变得越来越困难,所以MapReduce的committer们决定从架构上重新设计MapReduce,使下一代的MapReduce(MRv2/Yarn)框架具有更好的扩展性、可用性、可靠性、向后兼容性和更高的资源利用率以及能支持除了MapReduce计算框架外的更多的计算框架。

 

原MapReduce框架的不足

 

 

 

  • JobTracker是集群事务的集中处理点,存在单点故障
  • JobTracker需要完成的任务太多,既要维护job的状态又要维护job的task的状态,造成过多的资源消耗
  • 在taskTracker端,用map/reduce task作为资源的表示过于简单,没有考虑到CPU、内存等资源情况,当把两个需要消耗大内存的task调度到一起,很容易出现OOM
  • 把资源强制划分为map/reduce slot,当只有map task时,reduce slot不能用;当只有reduce task时,map slot不能用,容易造成资源利用不足。

 

Yarn架构

Yarn/MRv2最基本的想法是将原JobTracker主要的资源管理和job调度/监视功能分开作为两个单独的守护进程。有一个全局的ResourceManager(RM)和每个Application有一个ApplicationMaster(AM),Application相当于map-reduce job或者DAG jobs。ResourceManager和NodeManager(NM)组成了基本的数据计算框架。ResourceManager协调集群的资源利用,任何client或者运行着的applicatitonMaster想要运行job或者task都得向RM申请一定的资源。ApplicatonMaster是一个框架特殊的库,对于MapReduce框架而言有它自己的AM实现,用户也可以实现自己的AM,在运行的时候,AM会与NM一起来启动和监视tasks。 

ResourceManager

ResourceManager作为资源的协调者有两个主要的组件:Scheduler和ApplicationsManager(AsM)。

Scheduler负责分配最少但满足application运行所需的资源量给Application。Scheduler只是基于资源的使用情况进行调度,并不负责监视/跟踪application的状态,当然也不会处理失败的task。RM使用resource container概念来管理集群的资源,resource container是资源的抽象,每个container包括一定的内存、IO、网络等资源,不过目前的实现只包括内存一种资源。

ApplicationsManager负责处理client提交的job以及协商第一个container以供applicationMaster运行,并且在applicationMaster失败的时候会重新启动applicationMaster。下面阐述RM具体完成的一些功能。

 

  1. 资源调度:Scheduler从所有运行着的application收到资源请求后构建一个全局的资源分配计划,然后根据application特殊的限制以及全局的一些限制条件分配资源。
  2. 资源监视:Scheduler会周期性的接收来自NM的资源使用率的监控信息,另外applicationMaster可以从Scheduler得到属于它的已完成的container的状态信息。
  3. Application提交:
  • client向AsM获得一个applicationIDclient将application定义以及需要的jar包
  • client将application定义以及需要的jar包文件等上传到hdfs的指定目录,由yarn-site.xml的yarn.app.mapreduce.am.staging-dir指定
  • client构造资源请求的对象以及application的提交上下文发送给AsM
  • AsM接收application的提交上下文
  • AsM根据application的信息向Scheduler协商一个Container供applicationMaster运行,然后启动applicationMaster
  • 向该container所属的NM发送launchContainer信息启动该container,也即启动applicationMaster、AsM向client提供运行着的AM的状态信息。
  • AM的生命周期:AsM负责系统中所有AM的生命周期的管理。AsM负责AM的启动,当AM启动后,AM会周期性的向AsM发送heartbeat,默认是1s,AsM据此了解AM的存活情况,并且在AM失败时负责重启AM,若是一定时间过后(默认10分钟)没有收到AM的heartbeat,AsM就认为该AM失败了。
  •  

    关于ResourceManager的可用性目前还没有很好的实现,不过Cloudera公司的CDH4.4以后的版本实现了一个简单的高可用性,使用了Hadoop-common项目中HA部分的代码,采用了类似hdfs namenode高可用性的设计,给RM引入了active和standby状态,不过没有与journalnode相对应的角色,只是由zookeeper来负责维护RM的状态,这样的设计只是一个最简单的方案,避免了手动重启RM,离真正的生产可用还有一段距离。

    NodeManager

    NM主要负责启动RM分配给AM的container以及代表AM的container,并且会监视container的运行情况。在启动container的时候,NM会设置一些必要的环境变量以及将container运行所需的jar包、文件等从hdfs下载到本地,也就是所谓的资源本地化;当所有准备工作做好后,才会启动代表该container的脚本将程序启动起来。启动起来后,NM会周期性的监视该container运行占用的资源情况,若是超过了该container所声明的资源量,则会kill掉该container所代表的进程。

    另外,NM还提供了一个简单的服务以管理它所在机器的本地目录。Applications可以继续访问本地目录即使那台机器上已经没有了属于它的container在运行。例如,Map-Reduce应用程序使用这个服务存储map output并且shuffle它们给相应的reduce task。

    在NM上还可以扩展自己的服务,yarn提供了一个yarn.nodemanager.aux-services的配置项,通过该配置,用户可以自定义一些服务,例如Map-Reduce的shuffle功能就是采用这种方式实现的。

    NM在本地为每个运行着的application生成如下的目录结构:

     

    Container目录下的目录结构如下: 

     

     

    在启动一个container的时候,NM就执行该container的default_container_executor.sh,该脚本内部会执行launch_container.sh。launch_container.sh会先设置一些环境变量,最后启动执行程序的命令。对于MapReduce而言,启动AM就执行org.apache.hadoop.mapreduce.v2.app.MRAppMaster;启动map/reduce task就执行org.apache.hadoop.mapred.YarnChild。 

     

    ApplicationMaster

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

    MRv2运行流程:

     

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

    原文链接:Yarn详解(责编:Arron)

    分享到:
    评论

    相关推荐

      05.hadoop上课笔记之hadoop5mapreduce和yarn

      Hadoop.MapReduce 和 YARN 笔记 本节笔记主要介绍了 Hadoop.MapReduce 和 YARN 的基本概念、组成部分、工作原理以及实践应用。 一、MapReduce 概念 MapReduce 是 Hadoop 的核心组件之一,负责处理大规模数据。...

      Hadoop Core(MapReduce + YARN + HDFS)_

      YARN引入了中央资源调度器和应用程序管理器,将原本由MapReduce承担的资源管理和任务调度职责分离,使得Hadoop能支持更多种类的计算框架,如Spark、Tez等。YARN的核心理念是让资源管理和应用程序执行分离,提高系统...

      Hadoop新MapReduce框架Yarn详解

      使用和学习过老Hadoop框架(0.20.0及之前版本)的同仁应该很熟悉如下的原MapReduce框架图:图1.Hadoop原MapReduce架构从上图中可以清楚的看出原MapReduce程序的流程及设计思路:可以看得出原来的map-reduce架构是...

      大数据技术之Hadoop(MapReduce&Yarn).docx

      Hadoop是一个开源的分布式计算框架,主要由两个关键组件组成:MapReduce和YARN。MapReduce是Hadoop的核心计算模型,用于处理大规模数据集;YARN则是资源管理系统,负责调度和管理集群中的计算资源。 **MapReduce...

      hadoop处理框架,hdfs,mapreduce,yarn

      Hadoop 处理框架、HDFS、MapReduce、YARN Hadoop 处理框架是大数据处理和分析的重要工具,主要由 HDFS、MapReduce 和 YARN 三个组件组成。HDFS 是一个分布式文件系统,提供高吞吐量的数据访问;MapReduce 是一个...

      《Hadoop技术内幕深入解析YARN架构设计与实现原理》.(董西成).[PDF]@ckook

      1. **YARN的基本概念**:YARN是Hadoop 2.x版本引入的新一代资源管理系统,旨在解决Hadoop 1.x中MapReduce单一职责的问题,将计算和资源管理分离,提供更好的可扩展性和灵活性。 2. **YARN架构**:YARN由全局...

      Hadoop技术内幕深入解析YARN架构设计与实现原理PDF

      《Hadoop技术内幕深入解析YARN架构设计与实现原理》这本书深入探讨了Hadoop生态系统中的核心组件YARN(Yet Another Resource Negotiator),它是Hadoop 2.x版本中的关键改进,旨在解决早期Hadoop MapReduce的资源...

      Hadoop的yarn详解

      Hadoop的YARN架构是Hadoop版本2.x引入的一个重要组件,它负责处理资源管理和作业调度,而核心的计算任务处理则交给了MapReduce、Tez、Spark等计算框架。YARN的出现是为了解决Hadoop早期版本中的可扩展性问题,它通过...

      hadoop 框架下 mapreduce源码例子 wordcount

      在Hadoop框架中,MapReduce是一种分布式计算模型,用于处理和生成大数据集。WordCount是MapReduce中的一个经典示例,它演示了如何利用该框架进行数据处理。在这个例子中,我们将深入理解Hadoop MapReduce的工作原理...

      Hadoop集群搭建部署与MapReduce程序关键点个性化开发.doc

      在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储和计算的能力。本文将详细阐述如何搭建Hadoop集群以及进行MapReduce程序的关键点个性化开发。 首先,我们来看任务1——Hadoop集群的部署。这...

      03_Hadoop MapReduce与Hadoop YARN.zip

      YARN的引入解决了早期Hadoop中MapReduce框架的单一职责问题。在YARN中,JobTracker被拆分为两个角色:Resource Manager(RM)和Application Master(AM)。RM全局管理集群资源,负责调度和分配任务;而AM则是每个...

      Hadoop技术内幕:深入解析YARN架构设计与实现原理 高清完整中文版PDF下载

      YARN的优势在于其灵活性,支持多种计算框架,如MapReduce、Spark、Tez等,使得Hadoop可以更好地适应不同的大数据处理场景。此外,YARN还提供了细粒度的资源调度和动态资源调整,提高了资源利用率。 本书不仅涵盖了...

      Hadoop中HDFS和MapReduce框架介绍pdf

      YARN作为Hadoop 2.x版本引入的新特性,取代了早期版本中的JobTracker,使得Hadoop能够支持更复杂的计算框架,如Spark、Tez等,进一步提高了系统的灵活性和效率。 总结来说,Hadoop的HDFS和MapReduce框架是大数据...

      hadoop最新版本3.1.1全量jar包

      hadoop-annotations-3.1.1.jar hadoop-common-3.1.1.jar hadoop-mapreduce-client-core-3.1.1.jar hadoop-yarn-api-3.1.1.jar hadoop-auth-3.1.1.jar hadoop-hdfs-3.1.1.jar hadoop-mapreduce-client-hs-3.1.1.jar ...

      Hadoop源码 包含mapred及mapreduce

      Hadoop源码 包含mapred

      Hadoop新框架Yarn详解.pdf

      YARN,全称为Yet Another Resource Negotiator,是Apache Hadoop项目自0.23.0版本引入的新一代资源管理框架,旨在解决原Hadoop MapReduce框架的诸多问题,提高可扩展性、资源利用率和整体性能。YARN将MapReduce的...

      大数据MapReduce和YARN架构原理.pdf

      MapReduce是一种分布式计算框架,用于处理大规模数据集的并行运算,而YARN(Yet Another Resource Negotiator)是Hadoop 2.0中的资源管理系统,负责管理集群资源和任务调度。 MapReduce架构原理 MapReduce是Google...

    Global site tag (gtag.js) - Google Analytics