Yarn是一个分布式的资源管理系统,用以提升分布式的集群环境下的资源利用率,这些资源包括内存、IO、网络、磁盘等。其产生的缘由是为了解决原MapReduce框架的不足。程序员
最初MapReduce的committer们还能够周期性的在已有的代码上进行修改,但是随着代码的增长以及原MapReduce框架设计的不足,在原MapReduce框架上进行修改变得愈来愈困难,面试
因此MapReduce的committer们决定从架构上从新设计MapReduce,使下一代的MapReduce(MRv2/Yarn)框架具备更好的扩展性、可用性、可靠性、向后兼容性和更高的资源利用率以及能支持除了MapReduce计算框架外的更多的计算框架。网络
一、MapReduce框架的不足架构
如今比较流行的说法是jobtracker的问题,好比单点故障,任务太重。但除了Jobtracker,同时还有一个TaskTracker。咱们看下图:app
JobTacker概述框架
JobTacker其承担的任务有:接受任务、计算资源、分配资源、与DataNode进行交流。分布式
在hadoop中每一个应用程序被表示成一个做业,每一个做业又被分红多个任务,JobTracker的做业控制模块则负责做业的分解和状态监控。oop
*最重要的是状态监控:主要包括TaskTracker状态监控、做业状态监控和任务状态监控。主要做用:容错和为任务调度提供决策依据。学习
TaskTracker概述大数据
TaskTracker是JobTracker和Task之间的桥梁:一方面,从JobTracker接收并执行各类命令:运行任务、提交任务、杀死任务等;另外一方面,将本地节点上各个任务的状态经过心跳周期性汇报给JobTracker。TaskTracker与JobTracker和Task之间采用了RPC协议进行通讯
资源slot概述
slot不是CPU的Core,也不是memory chip,它是一个逻辑概念,一个节点的slot的数量用来表示某个节点的资源的容量或者说是能力的大小,于是slot是 Hadoop的资源单位。
hadoop中什么是slots
因此JobTracker须要完成的任务太多,既要维护job的状态又要维护job的task的状态,形成过多的资源消耗
在taskTracker端,用map/reduce task做为资源的表示过于简单,没有考虑到CPU、内存等资源状况,当把两个须要消耗大内存的task调度到一块儿,很容易出现OOM
把资源强制划分为map/reduce slot,当只有map task时,reduce slot不能用;当只有reduce task时,map slot不能用,容易形成资源利用不足。
二、Yarn
首先让咱们看一看Yarn的架构
1.ResourceManager概述
是全局的,负责对于系统中的全部资源有最高的支配权。ResourceManager做为资源的协调者有两个主要的组件:Scheduler和ApplicationsManager(AsM)。
Scheduler负责分配最少但知足application运行所需的资源量给Application。Scheduler只是基于资源的使用状况进行调度,并不负责监视/跟踪application的状态,固然也不会处理失败的task。
ApplicationsManager负责处理client提交的job以及协商第一个container以供applicationMaster运行,而且在applicationMaster失败的时候会从新启动applicationMaster。
2.NodeManager概述
NM主要负责启动RM分配给AM的container以及表明AM的container,而且会监视container的运行状况。
在启动container的时候,NM会设置一些必要的环境变量以及将container运行所需的jar包、文件等从hdfs下载到本地,也就是所谓的资源本地化;当全部准备工做作好后,才会启动表明该container的脚本将程序启动起来。
启动起来后,NM会周期性的监视该container运行占用的资源状况,如果超过了该container所声明的资源量,则会kill掉该container所表明的进程。
3.ApplicationMaster概述
因为NodeManager 执行和监控任务须要资源,因此经过ApplicationMaster与ResourceManager沟通,获取资源。换句话说,ApplicationMaster起着中间人的做用。
转换为更专业的术语:AM负责向ResourceManager索要NodeManager执行任务所须要的资源容器,更具体来说是ApplicationMaster负责从Scheduler申请资源,以及跟踪这些资源的使用状况以及任务进度的监控。
因此咱们看到JobTracker的功能被分散到各个进程中包括ResourceManager和NodeManager:
好比监控功能,分给了NodeManager,和Application Master。
ResourceManager里面又分为了两个组件:调度器及应用程序管理器。
也就是说Yarn重构后,JobTracker的功能,被分散到了各个进程中。同时因为这些进程能够被单独部署因此这样就大大减轻了单点故障,及压力。
最后要提醒在yarn上写应用程序并不一样于咱们熟知的MapReduce应用程序,必须牢记yarn只是一个资源管理的框架,并非一个计算框架,计算框架能够运行在yarn上。咱们所能作的就是向RM申请container,而后配合NM一块儿来启动container。
结语
感谢您的观看,若有不足之处,欢迎批评指正。
为了帮助你们让学习变得轻松、高效,给你们免费分享一大批资料,帮助你们在成为大数据工程师,乃至架构师的路上披荆斩棘。在这里给你们推荐一个大数据学习交流圈:658558542 欢迎你们进群交流讨论,学习交流,共同进步。
当真正开始学习的时候不免不知道从哪入手,致使效率低下影响继续学习的信心。
但最重要的是不知道哪些技术须要重点掌握,学习时频繁踩坑,最终浪费大量时间,因此有有效资源仍是颇有必要的。
最后祝福全部遇到瓶疾且不知道怎么办的大数据程序员们,祝福你们在日后的工做与面试中一切顺利。