大数据学习之路~Hadoop~yarn工作原理与架构
一.Yarn的工作原理YARN的作业运行,主要由以下几个步骤组成:(1)作业提交第0步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。第1步:Client向RM申请一个作业id。第2步:RM给Client返回该job资源的提交路径和作业id。如果申请成功就会生成一个applicationId,ResourceManager是允许HDFS的te
一.Yarn的工作原理
YARN 的作业运行,主要由以下几个步骤组成:
(1)作业提交
第0步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。
第1步:Client向RM申请一个作业id。
第2步:RM给Client返回该job资源的提交路径和作业id。如果申请成功就会生成一个applicationId,ResourceManager是允许HDFS的temp 目录下面生成一个路径,这个路径名字是以你当前任务的applicationId命名的,这个目录也可以叫作业目录.目录生成之后就把一些Job的一些资源文件放到目录下面.
第3步:Client提交jar包、切片信息(job.split和job.xml)和配置文件到指定的资源提交路径。在准备阶段,Job会生成切片文件(job.split),切片文件的属性文件(job.xml),当前job运行的jar包(wc.jar),以上东西都会放到步骤2的作业目录里面.
注:切片信息由client端进行计算。
第4步:Client提交完资源后,向RM申请运行MrAppMaster。MrAppMaster这个进程负责整个Job,整个运行期间状态监控,容错,资源申请等等.一个进程在Yarn上运行必须要申请Container.Container里面有cpu内存等资源。
(2)作业初始化
第5步:向ResourceManager提交请求,请求会初始化一个Task, 然后进入ResourceManager的调度队列里面.
第6步:NodeManager负责从ResourceManager的队列里面来领取任务,领取之后给你封装出一个Container。
第7步:创建完Container之后里面有MRAppMaster运行需要的CPU和内存资源等等.
第8步:然后MRAppMaster一运行就会把之前步骤2目录那里生成的文件下载到本地,紧接着会读取本件里面的内容,读到job.xml里面的数据就知道要启动几个MapTask和几个ReduceTask了.
(3)任务分配
第9步:开始向ResourceManager继续申请运行MapTask容器,运行几个得看job.xml里面的值.同样申请也是会进到步骤五那里的ResourceManager调度队列里面。
第10步:NodeManager从ResourceManager调度队列里面领取到任务,就开始创建容器运行MapTask.
(4)任务运行
第11步:.MrAppMaster会把步骤2的wc.jar和job.xml配置文件和MrAppMaster自动生成的程序的启动脚本发给步骤10的MapTask,然后就运行脚本,就启动程序了,紧接着MapTask就生成自己的结果了.
第12步:MrAppMaster等待所有MapTask运行完毕后,然后向步骤五的ResourceManager申请容器,进入调度队列里面,申请成功之后创建Container容器,会运行ReduceTask任务.
第13步:ReduceTask向MapTask获取相应分区的数据。
第14步:程序运行完成之后,MRAppMaster会向ResourceManager申请注销掉自己.注销之后Container容器就会被销毁,资源就被释放.
二.Yarn的基本架构
1. ResourceManager
ResourceManager是master上的进程,负责整个分布式系统的资源管理和调度。主要功能包括:
1)处理来自client端的请求(包括提交作业/杀死作业)
2)启动/监控Application Master
3)监控NodeManager的情况,比如可能挂掉的NodeManager
4)资源的分配和调度
2. NodeManager
NodeManager是处在slave节点上的进程,他只负责当前slave节点的资源管理和调度以及task的运行。他会定期向ResourceManager汇报资源/Container的情况(heartbeat);接受来自ResourceManager对于Container的启停命令。主要功能概括如下:
1)单个节点上的资源管理;
2)处理来自ResourceManager上的命令;
3)处理来自ApplicationMaster上的命令。
3. Application Master
每一个提交到集群的作业都会有一个与之对应的Application Master来负责应用程序的管理。他负责进行数据切分;为当前应用程序向ResourceManager去申请资源(也就是Container)并分配给具体的任务;与NodeManager通信,用来启停具体的任务,任务运行在Container中;而任务的监控和容错也是由Application Master来负责的。
1)负责数据的切分;
2)为应用程序申请资源并分配给内部的任务;
3)任务的监控与容错。
4. Container
那么container又是什么呢?它包含了Application Master向ResourceManager申请的计算资源,比如说CPU/内存的大小,以及任务运行所需的环境变量和队任务运行情况的描述。
更多推荐
所有评论(0)