分布式资源调度——YARN框架


YARN是Hadoop2.x才有的,所以在介绍YARN之前,我们先看一下MapReduce1.x时所存在的问题:MapReduce1.x时的架构如下:
可以看到,1.x时也是Master/Slave这种主从结构,在集群上的表现就是一个JobTracker带多个TaskTracker。JobTracker:负责资源管理和作业调度
TaskTracker:定期向JobTracker汇报本节点的健康状况、资源使用情况以及作业执行情况。还可以接收来自JobTracker的命令,例如启动任务或结束任务等。那么这种架构存在哪些问题呢:由于1.x版本不支持其他框架的作业,所以导致我们需要根据不同的框架去搭建多个集群。这样就会导致资源利用率比较低以及运维成本过高,因为多个集群会导致服务环境比较复杂。如下图:
在上图中我们可以看到,不同的框架我不仅需要搭建不同的集群。而且这些集群很多时候并不是总是在工作,如上图可以看到,Hadoop集群在忙的时候Spark就比较闲,Spark集群比较忙的时候Hadoop集群就比较闲,而MPI集群则是整体并不是很忙。这样就无法高效的利用资源,因为这些不同的集群无法互相使用资源。除此之外,我们还得运维这些个不同的集群,而且文件系统是无法共享的。如果当需要将Hadoop集群上的HDFS里存储的数据传输到Spark集群上进行计算时,还会耗费相当大的网络IO流量。所以我们就想着要把这些集群都合并在一起,让这些不同的框架能够运行在同一个集群上,这样就能解决这各种各样的问题了。如下图:
正是因为在1.x中,有各种各样的问题,才使得YARN得以诞生,而YARN就可以令这些不同的框架运行在同一个集群上,并为它们调度资源。我们来看看Hadoop2.x的架构图:
在上图中,我们可以看到,集群最底层的是HDFS,在其之上的就是YARN层,而在YARN层上则是各种不同的计算框架。所以不同计算框架可以共享同一个HDFS集群上的数据,享受整体的资源调度,进而提高集群资源的利用率,这也就是所谓的 xxx on YARN。YARN概述:YARN架构图,也是Master/Slave结构的:
从上图中,我们可以看到YARN主要由以下几个核心组件构成:1. ResourceManager, 简称RM,整个集群同一时间提供服务的RM只有一个,它负责集群资源的统一管理和调度。以及还需要处理客户端的请求,例如:提交作业或结束作业等。并且监控集群中的NM,一旦某个NM挂了,那么就需要将该NM上运行的任务告诉AM来如何进行处理。2. NodeManager, 简称NM,整个集群中会有多个NM,它主要负责自己本身节点的资源管理和使用,以及定时向RM汇报本节点的资源使用情况。接收并处理来自RM的各种命令,例如:启动Container。NM还需要处理来自AM的命令,例如:AM会告诉NM需要启动多少个Container来跑task。3. ApplicationMaster, 简称AM,每个应用程序都对应着一个AM。例如:MapReduce会对应一个、Spark会对应一个。它主要负责应用程序的管理,为应用程序向RM申请资源(Core、Memory),将资源分配给内部的task。AM需要与NM通信,以此来启动或停止task。task是运行在Container里面的,所以AM也是运行在Container里面。4. Container, 封装了CPU、Memory等资源的一个容器,相当于是一个任务运行环境的抽象。5. Client, 客户端,它可以提交作业、查询作业的运行进度以及结束作业。YARN官方文档地址如下:https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/YARN.html假设客户端向ResourceManager提交一个作业,ResourceManager则会为这个作业分配一个Container。所以ResourceManager会与NodeManager进行通信,要求这个NodeManager启动一个Container。而这个Container是用来启动ApplicationMaster的,ApplicationMaster启动完之后会与ResourceManager进行一个注册。这时候客户端就可以通过ResourceManager查询作业的运行情况了。然后ApplicationMaster还会到ResourceManager上申请作业所需要的资源,申请到以后就会到对应的NodeManager之上运行客户端所提交的作业,然后NodeManager就会把task运行在启动的Container里。如下图:
另外找到两篇关于YARN执行流程不错的文章:介绍完基本的理论部分之后,我们来搭建一个伪分布式的单节点YARN环境,使用的hadoop版本如下:官方的安装文档地址如下:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html1.下载并解压好hadoop-2.6.0-cdh6.7. 香港云主机0,这一步可以参考我之前写的一篇关于HDFS伪分布式环境搭建的文章,我这里就不再赘述了。确保HDFS是正常启动状态:2.编辑mapred-site.xml配置文件,在文件中增加如下内容:3.编辑yarn-site.xml配置文件,在文件中增加如下内容:4.启动ResourceManager进程以及NodeManager进程:5.通过浏览器来访问ResourceManager,默认端口是8088,例如192.168.77.130:8088,就会访问到这样的一个页面上:
错误解决:从上图中,可以看到有一个不健康的节点,也就是说我们的单节点环境有问题,点击红色框框中标记的数字可以进入到详细的信息页面,在该页面中看到了如下信息:于是查看yarn的日志文件:yarn-root-nodemanager-localhost.log,发现如下警告与异常:
很明显是因为磁盘的使用空间达到了90%,所以我们需要删除一些没有的数据,或者扩容磁盘空间才行。于是删除了一堆安装包,让磁盘空间降低到90%以下了:这时再次刷新页面,可以发现这个节点就正常了:
到此为止,我们的yarn环境就搭建完成了。如果需要关闭进程则使用以下命令:虽然我们没有搭建MapReduce的环境,但是我们可以使用Hadoop自带的一些测试例子来演示一下如何提交作业到YARN上执行。Hadoop把example的包放在了如下路径,可以看到有好几个jar包:在这里我们使用hadoop-mapreduce-examples-2.6.0-cdh6.7.0.jar这个jar包来进行演示:命令说明:运行以上命令后,到浏览器页面上进行查看,会有以下三个阶段:1.接收资源,这个阶段就是ApplicationMaster到ResourceManager上申请作业所需要的资源:
2.运行作业,这时候NodeManager就会把task运行在启动的Container里:
3.作业完成:
终端输出信息如下:以上这个例子计算了一个PI值,下面我们再来演示一个hadoop中比较经典的例子:wordcount ,这是一个经典的词频统计的例子。首先创建好用于测试的文件:然后执行以下命令:在yarn页面上显示的阶段信息:

终端输出信息如下:查看输出的结果文件:

相关推荐: 如何打开和关闭win7自带的防火墙

这篇文章主要介绍“如何打开和关闭win7自带的防火墙”,在日常操作中,相信很多人在如何打开和关闭win7自带的防火墙问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何打开和关闭win7自带的防火墙”的疑惑有所帮助!接下来,请跟着…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/22 20:52
下一篇 07/22 20:52

相关推荐