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

摘要:本文介绍了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框架的不足(--Hadoop虽然强大,但不是万能的--)

  • 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的状态信息。
  4. 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)



 

时间: 2024-08-27 06:39:51

更快、更强——解析Hadoop新一代MapReduce框架Yarn(CSDN)的相关文章

解析Hadoop新一代MapReduce框架Yarn

背景 Yarn是一个分布式的资源管理系统,用以提高分布式的集群环境下的资源利用率,这些资源包括内存.IO.网络.磁盘等等.其产生的原因是为了解决原MapReduce框架的不足.最初MapReduce的committer们还可以周期性的在已有的代码上进行修改,可是随着代码的增加以及原MapReduce框架设计的不足,在原MapReduce框架上进行修改变得原来越困难,所以MapReduce的committer们决定从架构上重新设计MapReduce,使下一代的MapReduce(MRv2/Yarn

Hadoop新MapReduce框架Yarn详解

简介 本文介绍了Hadoop自0.23.0版本后新的MapReduce框架(Yarn)原理,优势,运行机制和配置方法等,着重介绍新的yarn框架相对于原框架的差异及改进,并通过Demo示例详细介绍了在新的Yarn框架下搭建和开发Hadoop程序的方法.读者通过本文中新旧Hadoop MapReduce框架的对比,更深刻理解新的yarn框架技术与那里和设计思想,文中的Demo代码经过微小修改既可用于用户基于Hadoop新框架的实际生产环境. Hadoop MapReduceV2(Yarn)框架简介

Hadoop 新 MapReduce 框架 Yarn 详解

原 Hadoop MapReduce 框架的问题 对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分布式文件存储及处理框架,对于 Hadoop 框架的介绍在此不再累述,读者可参考 Hadoop 官方简介.使用和学习过老 Hadoop 框架(0.20.0 及之前版本)的同仁应该很熟悉如下的原 MapReduce 框架图: 图 1.Hadoop 原 MapReduce 架构 从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路: 首先用户程序 (JobCli

与阿里云整个生态体系共同成长,更快更好的为房地产行业客户提供高价值的服务。

免费开通大数据服务:https://www.aliyun.com/product/odps "最早是新业务要做,但是买服务器来不及,管理员没到位,而且新业务的成本很高,是否能成功也是未知,因此明源决定采用阿里云,等资金和人到位再搬到自己内部.然而就是这种误打误撞,却让明源抓住了一个很好的机会走在了正确的轨道上."--副总裁童继龙"阿里云数加的覆盖面很广,从存储.计算到上层应用,提供了一整套的解决方案,确实起到了马总说的普惠大数据.此外,数加也在不断的迭代,不停的有新产品出现,

秒开缓存系统让网速更快更流畅

互联网发展势头日趋迅猛,一些高清视频.精美图片以及网页的加载内容日趋丰富,使得运行流量无限增长,由于对出口产生压力,导致用户体验越来越差.这要是放在从前,你要是着急就只有增加带宽,这是要继续增加投入的,看来这不是长远打算.武汉秒开网络科技有限公司研发的秒开缓存系统的出现,彻底解决了这些难题. 说了这么多,也许你还没有了解秒开缓存系统是个什么东东,举个例子来说吧.你入住一家还算有规模的酒店,想要看个电影解解乏,可是看着看着画面就停在那里了,一个圈圈在那儿转啊转的就是看不了.这说明了什么,是因为这家

更快更简单更美观——Power-BI V9.0隆重发版

继Power-BIV8.0发布后,经过11个月的精心准备,Power-BI V9.0隆重发布!Power-BI V9.0在原有基础上,在软件操作性.美观性.易用性.效率等方面进行了不断地完善与提升,让BI的开发与应用变得更快更简单更美观! 1. 真正做到5分钟制作一个信息量大.操作简易且美观大方的管理驾驶舱. 不同的管理角色,对管理驾驶舱的需求都是不同的:同一个管理角色,在不同的时期,其对KPI的关注也是不同的.那么,如何能快速制作部署满足上述场景的管理驾驶舱呢?Power-BI在众多细节上进行

一起来学习使用更快更好用的Android模拟器Genymotion

相信使用过Android原生模拟器的同学,对该模拟器都深恶痛绝,启动时间长,操作起来非常卡顿,而且经常还与我们的Eclipse失联,各种毛病丛生,极大的影响了我们的开发时间与效率.今天我们来介绍一款更快更好用的Android模拟器Genymotion的使用规则,为我们的开发事业助力! 我们先来看一下这款模拟器长什么样子呢! 我们可以清楚的看见它能支持原生模拟器所不能支持的GPS定位功能,摄像头和电源管理等等功能,还有各类的模拟感应器,是不是非常动心了呢!他还能与我们的Eclispe完美整合,支持

神了!React VR使得Oculus Home在Gear VR上运行更快更省电

(52VR开发网2017年5月23日讯)Gear VR近日频繁进入人们的视野. 这不仅仅是因为三星和Oculus的移动VR头显配备了新的运动控制器,还是因为在软件方面也进行了更新. 这些更新都得益于新的React VR框架. 当使用新的Gear装备时,Gear VR用户每次启动头显时都会进入Oculus Home中心的新版本,就像他们在Rift 上做的一样. 在发布之前,我们报道说,这个新版本的家庭显示的分辨率是双倍,这得益于Oculus 的首席技术官(CTO) John Carmack的一些技

更快更低耗!Spread表格控件V11 CTP发布,性能巨大提升

作为一款功能和 Excel 类似的表格控件,Spread Studio 提供灵活的定制能力和丰富的数据可视化效果,可用于在应用系统中实现表格数据录入和编辑等交互功能,涵盖 Windows Forms.ASP.NET.XAML 以及 WinRT 各平台. Spread Studio 素来以数据处理快.内存占用低.和Excel高度相似而享誉全球,被中国石油.华为.NEC.宝钢.中国农行等用户广泛应用在各领域的信息系统中. 日前,全新的Spread Studio V11CTP版本强势发布,为您呈现更惊