MR工作过程大致分为以下几步:
1:作业配置
2:提交作业
2.1:从JobTracker获取新的JobID。
2.2:将该Job相关的资源(jar,libjars)发送到JobTracker。
2.3:计算输入分片。
2.4:将job.xml发送到JobTrack。
这样就将Job发送给JobTracker。
3:作业初始化
3.1:将接收到的Job放到队列中并生成与之对应的JobInProgress对象来管理该Job。
3.2:JobInProgress调用initTasks()来初始化Task
3.2.1:创建分片并为每个分片生成MapTask和ReduceTask,并生成与之对应的TaskInProgress来管理Task。
3.2.2:将MapTask放入名为 nonRunningMapCache 的Set 中。
3.2.2:将ReduceTask放入名为 nonRunningReduces 的Set中。
这样Task就初始化好了,
4:任务分配
4.1:TaskTracker通过心跳机制与JobTracker通信,当TaskTracker有足够的资源(磁盘,cpu,slot空闲)时,从JobTracker那里获取任务。
4.2:JobTracker 通过TaskSchedule 来分配任务(map任务和reduce任务)。
5:任务执行
5.1:TaskTracker拿到任务之后,通过TaskLauncher.startNewTask()来执行任务。
6:进度和状态更新
TaskTracker上该Job的任务都完成了汇报给JobTracker
7:作业完成
JobTracker修改Job的状态,返回给JobClient。
下面是执行的时序图