Yarn取代job/task tracker
生活随笔
收集整理的这篇文章主要介绍了
Yarn取代job/task tracker
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
转自:http://www.aboutyun.com/thread-7678-1-1.html
问题导读: 1、什么是yarn? 2、Yarn 和MapReduce相比,它有什么特殊作用 ?
背景 Yarn是一个分布式的资源管理系统,用以提高分布式的集群环境下的资源利用率,这些资源包括内存、IO、网络、磁盘等。其产生的原因是为了解决原MapReduce框架的不足。最初MapReduce的committer们还可以周期性的在已有的代码上进行修改,可是随着代码的增加以及原MapReduce框架设计的不足,在原MapReduce框架上进行修改变得越来越困难,所以MapReduce的committer们决定从架构上重新设计MapReduce,使下一代的MapReduce(MRv2/Yarn)框架具有更好的扩展性、可用性、可靠性、向后兼容性和更高的资源利用率以及能支持除了MapReduce计算框架外的更多的计算框架。
原MapReduce框架的不足 l JobTracker是集群事务的集中处理点,存在单点故障 l JobTracker需要完成的任务太多,既要维护job的状态又要维护job的task的状态,造成过多的资源消耗 l 在taskTracker端,用map/reduce task作为资源的表示过于简单,没有考虑到cpu、内存等资源情况,当把两个需要消耗大内存的task调度到一起,很容易出现OOM l 把资源强制划分为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。
2、 资源监视 Scheduler会周期性的接收来自NM的资源使用率的监控信息,另外applicationMaster可以从Scheduler得到属于它的已完成的container的状态信息。
3、 application提交 l client向AsM获得一个applicationID l client将application定义以及需要的jar包文件等上传到hdfs的指定目录,由yarn-site.xml的yarn.app.mapreduce.am.staging-dir指定 l client构造资源请求的对象以及application的提交上下文发送给AsM l AsM接收application的提交上下文 l AsM根据application的信息向Scheduler协商一个Container供applicationMaster运行,然后启动applicationMaster l 向该container所属的NM发送launchContainer信息启动该container,也即启动applicationMaster l 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上的计算模型而言,必须得实现针对该计算模型的applicaitonMaster用以向RM申请资源运行task,比如运行在yarn上的spark框架也有对应的applicationMaster实现,归根结底,yarn是一个资源管理的框架,并不是一个计算框架,要想在yarn上运行应用程序,还得有特定的计算框架的实现。由于yarn是伴随着MRv2一起出现的,所以下面简要概述MRv2在yarn上的运行流程。
转载于:https://www.cnblogs.com/augustone/p/6275720.html
总结
以上是生活随笔为你收集整理的Yarn取代job/task tracker的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: erlang md5
- 下一篇: 将war包发布到测试服的常用命令