MapReduce 作業提交執行過程程式碼分析(Hadoop 1.2.1)
阿新 • • 發佈:2019-02-07
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。
下面是執行的時序圖