通俗说基于Yarn的Map-Reduce过程
先看全图是基于Yarn的Map-Reduce运行过程,下面通俗的说一下这个过程。
从前有一个老板Resource Manager,开了一家外包公司,这家公司有很多的团队Node,每个团队都有个经理Node Manager,每过一段时间,团队经理Node Manager都要到老板那里开会,向老板的人事部门Manage NMs的ResourceTackerService报告当前的人员使用情况。
这一天,来了一个客户Client,来到总部的接待处ClientRMService说,我有个项目,你们干不?getNewApplication
当老板觉得这个项目干得过,于是就给客户Client拿了一个号Application ID,说项目我们接,把你们的项目材料提交一下吧。
于是客户Client回去整理了一下项目的材料,将项目的具体材料,例如项目执行所需要的jars,项目的说明文档job.xml,项目的进度规划splits,上传到了同一的云盘HDFS上,然后向总部提交了申请表submitApplication。
老板Resource Manager对项目管理组Manage AMs的人说,接了项目,弄个项目经理ApplicationMaster(MRAppMaster)吧(startContainter),专门负责这个项目的对接。于是在一个团队里面Node Manager下面抽了一个人,做项目经理,然后告诉客户,以后由着项目经理进行对接了。
项目经理MRAppMaster说:是,老板!,于是走马上任registerApplicationMaster。
项目经理MRAppMaster对客户说:以后这个项目的事情,就由我来对接了,我会不断将项目进度反馈给你的getJobReport。
新官上任三把火,项目经理MRAppMaster开始撸起袖子干革命了。
第一件事情,就是从云盘HDFS上将项目资料下载下来,仔细阅读,发现这个客户要干的事情真不少,需要很多人一起干,于是按照splits里面的规划,将任务分成很多份,大家一起干MapTask,这样干的快,但是最终的结果,还是需要几个可靠的人将大家的结果收集起来,做个汇总ReduceTask,然后将项目结果也写到云盘HDFS上去,告诉客户任务执行完了,结果在云盘上,自己去看吧。
好了,项目经理MRAppMaster做好了上述的规划,开始干。
项目经理先去总部申请人头allocate,由于每个人都是算工时的,因而MapTask的部分可以先安排人,做总结汇报的ReduceTask的人还不着急。
于是总部Resource Manager经过协调部门Scheduler找到了足够的人选,然后由项目管理组ApplicationMasterService告诉项目经理MRAppMaster,团队一Node Manager手下有两个人可以干活,团队三Node Manager手下有三个人可以干活,团队七手下有一个人可以干活。
于是项目经理MRAppMaster告知各团队经理Node Manager,总部给我说了,你们说下各有N个人可以加入我的项目,开始干活了。
于是Node Manager将人分ContainerExecutor到项目组,先进行MapTask的任务,分到项目组的人不断将MapTask的结果向项目经理汇报。
当项目经理发现MapTask的任务执行的差不多了,于是向总部申请人头allocate来做汇总的工作ReduceTask。
做汇总工作的人也是从各团队分配的,也是要不断的将结果向项目经理汇报。
做汇总工作的人ReduceTask,会将MapTask的结果收集起来,做一定的处理,得到汇总的结果,写入云盘HDFS。
当结果汇总完毕,任务就结束了,项目经理告诉客户任务圆满完成,也告诉总部项目我交差了finishApplicationMaster,可以开始干下一个项目了。
有人问,有什么项目需要这样兴师动众呢?下面举几个例子。