1. 程式人生 > >MapReduce 作業提交執行過程程式碼分析(Hadoop 1.2.1)

MapReduce 作業提交執行過程程式碼分析(Hadoop 1.2.1)

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。

下面是執行的時序圖