简述Yarn工作流程 - 图1

运行WC任务的流程

0.MapReduce程序运行代码
1.MapReduce向Yarn申请ResourceManager,
2.如果申请成功就会生成一个applicationId,ResourceManager是允许HDFS的temp 目录下面生成一个路径,这个路径名字是以你当前任务的applicationId命名的,这个目录也可以叫作业目录.目录生成之后就把一些Job的一些资源文件放到目录下面.
3.在准备阶段,Job会生成切片文件(job.split),切片文件的属性文件(job.xml),当前job运行的jar包(wc.jar),以上东西都会放到步骤2的作业目录里面.
4.开始申请运行mrAppMaster,这个进程负责你整个Job,整个运行期间状态监控,容错,资源申请等等.一个进程在Yarn上运行必须要申请Container.Container里面有cpu内存资源和mrAppmaster提供你Job的运行.
5.向ResourceManager提交请求,请求会初始化一个Task, 然后进入ResourceManager的调度队列里面.
6.NodeManager负责从ResourceManager的队列里面来领取任务,领取之后给你封装出一个Container
7.创建完Container之后里面有MRAppMaster运行需要的CPU和内存资源等等.
8.然后MRAppMaster一运行就会把之前步骤2目录那里生成的文件下载到本地,紧接着会读取本件里面的内容,读到job.xml里面的数据就知道要启动几个MapTask和几个ReduceTask了.
9.开始向ResourceManager继续申请运行MapTask容器,运行几个得看job.xml里面的值.同样申请也是会进到步骤五那里的ResourceManager调度队列里面,
10.NodeManager从ResourceManager调度队列里面领取到任务,就开始创建容器运行MapTask.
11.MrAppMaster会把步骤2的wc.jar和job.xml配置文件和MrAppMaster自动生成的程序的启动脚本发给步骤10的MapTask,然后就运行脚本,就启动程序了,紧接着MapTask就生成自己的结果了.
12.然后向步骤五的ResourceManager申请任务,进入调度队列里面,申请成功之后创建Container容器后,会运行ReduceTask任务.
13.ReduceTask向Map获取相应的分区数据
14.程序运行完成之后,MRAppMaster会向ResourceManager申请注销掉自己.注销之后Container容器就会被销毁,资源就被释放.

容错机制

Yarn还负责容错,假如说A MRAppMaster运行MapTask的很慢, Yarn就会给A MRAppMaster杀死 ,然后Yarn会再次生成一个任务去重新运行刚刚杀死的任务.