欢迎来到魔据教育大数据学院,专注大数据工程师培养!
当前位置:首页 > 学习资料 > 讲师博文 > Yarn的运行原理

Yarn的运行原理

时间:2017-11-28 10:16:02作者:魔据大数据学院

首先我们要知道yarn是什么?能干什么?

先来看一下yarn的诞生:
Yarn的运行原理 
 
 
了解Yarn的架构之前,先说说为什么会出现Yarn。在Hadoop v1版本中,存在最大的问题就是资源管理大家已经不满足于仅仅能在Hadoop集群上运行MapReduce程序,更希望能够有一套合理的管理机制来控制整个集群的资源调度,于是Yarn平台应运而生
 
还记得之前我讲到的吗? 任何软件行业解决不了的问题都可以通过一个中间层来解决,于是乎yarn就诞生了,这里你可以暂且把yarn当成资源调度,它负责调度hdfs和mapreduce
 
那么我们之前用到过yarn吗?当然用到过了,还记得之前敲的一个命令:
./start-yarn.sh
Yarn的运行原理 
看上图,之前我们在用./start-dfs.sh命令的时候,是启动了hdfs分布式文件系统,那么对应的启动了三个进程,这三个进程我都一一讲过,也讲过原理
那么我们后面的./start-yarn.sh命令是启动yarn资源调度,那么这时候多了两个进程:ResourcManager    NodeManager
那么你可以这么理解:ResourcManager  和  NodeManager 进程就是Yarn
好了,说完上面的,我们再来想想,之前还记得我们做过的三个mapreduce的案例吗
一个是单词计数,一个是去重,一个是相加求和取平均值
这三个例子,都是调用了hdfs上面的test.txt文件,然后又通过了mapreduce阶段最终又输出到了hdfs里面
好了,这里头又用了hdfs,还用到了mapreduce,那么是谁来分配的呢?
对了,这其中的桥梁,或者说中间层就是yarn!!
还记得我们代码当中的main方法下的job吗, 之前我就说它是一个任务,是要给yarn调用,这里确实是这样
我们将我们的代码和类都放到了job中,然后将job提交后,hadoop jar wordcount命令执行jar包的时候,首先yarn会先将job拿走,然后经过一系列复杂的过程后,才会一步一步的调用hdfs 再调用mapreduce 再将结果放回到hdfs,那么这一切的调度和分配都是yarn在执行,还记得之前我们在使用hadoop jar wordcount命令的时候,我又打开了一个窗口jps命令查看进程发现,多了三个进程:
Yarn的运行原理 
这三个进程都是yarn调度的,好了,说了这么多,大家消化一下,屡一下思路,过会我们开始讲原理!
 
 
 
先看下面这个图:
Yarn的运行原理 
 
1.我们通过XShell客户端执行了:hadoop jar wordcount.jar 命令,当程序执行到job代码的时候会启动一个runjar的进程,这个runjar就是之前新启动的三个进程之一Yarn的运行原理
2.当启动了runjar这个进程后,runjar就会向ResourcManager 发送一个请求,请求申请执行job任务
3.ResourcManager 会返回信息,可以执行,但是需要将job封装的信息(就是map类,reduce类 说白了就是程序代码逻辑)放在hdfs下的/tmp/hadoop-yarn/staging/hyxy/.staging/jobid目录下,但是咱们看不了,每个jobid都单独对应一个job,这个job的id是ResourcManager 返回给runjar的时候带过去的;
Yarn的运行原理 
4.runjar接收到了第三步的信息后,执行到相对应的目录下
5.存储结束后,runjar向ResourcManager 返回信息,存储成功;并且将job任务传送到ResourcManager 中,ResourcManager 将job任务放到消息队列中,等待被执行
6.nodeManager会实时的向ResourcManager 发送心跳(判断nodeManager是否死亡这个是交给ResourcManager (yarn)来做的),并且查看消息队列中有没有待执行的任务,如果有任务需要执行,并且此nodeManager节点资源也空余,那么就会在自己的节点上开辟若干个资源池(continer),资源池的意思是将自己的资源,内存,网络,cpu,io等等切分一部分出来做成一个空间,这个空间专门是用来执行job任务的,(这里强调一下,一般是多个nodeManager节点同时接这个job任务,那么在接任务的时候,ResourcManager就已经看穿一切,并且会将job任务根据资源给多个nodeManager节点,这里扩展一下,一个datanode节点可以开辟出非常多个continer,每一个continer能支持一个map任务 或者 reduce任务计算)
7.那么nodeManager将job领到若干个资源池后,也会获得job的id,此时,会去hdfs中找对应的jobid目录,将对应的job所封装的所有信息拿到资源池里面,那么好了,到目前为止我们都是在说分配资源,请问,有没有启动mapreduce框架,答案肯定是没有!
8.当最后一个nodeManager将jobid的信息复制到本地的时候就会给ResourcManager反馈资源池的信息
9.这个时候,就要用到MapReduce了,所以,ResourcManager会随机在一个节点上开辟MRAPPmaster进程; 还记得我们之前单词计数,jps多出来的三个进程吗?其中的MRAPPmasterYarn的运行原理进程就是管理mapreduce的
10.MAPppmaster会根据每个资源池的需求启动相对应的map 或者 reduce   那么map就叫做map task ,reduce叫做reduce task那么map和 reduce所对应的进程就是yarn childYarn的运行原理这里强调一下,每一个资源池只能执行一个map或者reduce; map可以有多个,reduce也可以有多个
11.那么在MRAPppmaster启动开始启动map线程的时候,MAPppmaster会一直实时的和ResourceManager交互,原因是如果某个节点的map运行结束了,那么那个节点的资源池就闲置了,所以要一直交互,发现有哪个资源池闲置了,就会通知ResouceManager,而RscouceManager就会将对应的资源池回收掉!
 
好了,以上就是yarn的运行原理,到目前为止hadoop最重要的三个运行原理 hdfs  和 yarn 都讲完了,接下来给大家一点时间消化一下

更多大数据相关资讯敬请关注魔据教育,为您分享最及时的大数据资讯。
学习大数据敬请关注魔据教育微信二维码。
魔据教育微信二维码

【版权与免责声明】如发现内容存在版权问题,烦请提供相关信息发邮件至kefu@mojuedu.com,我们将及时沟通与处理。本站内容除非来源注明魔据教育,否则均为网友转载,涉及言论、版权与本站无关。

全国咨询热线:18501996998,值班手机:18501996998(7*24小时)

在线咨询:张老师QQ 320169340

企业合作服务专线:010-82340234-821, 院校合作洽谈专线:010-82340234

Copyright 2001-2019 魔据教育 - 北京华育兴业科技有限公司 版权所有,京ICP备17018991号-2

免费在线咨询立即咨询

免费索取技术资料立即索取

大数据技术交流QQ:226594285

电话咨询010-82340234