一、 提交做業:主要執行函數submitJob(); 函數
① 經過調用jobTracker對象的getNewJobId()方法從JobTracker處理取當前做業的ID號; spa
② 檢查做業相關路徑。 對象
③ 計算做業的出入劃分,並將劃分信息寫入Job.split文件中。若是吸入失敗就會返回錯誤信息。 資源
④ 將運行做業所須要的資源---包括做業JAR文件,配置文件和計算所得的輸入劃分等—複製到做業對應的HDFS上。 get
⑤ 調用JobTracker對象的submitJob()方法來真正提交做業; it
二、 初始化做業---做業提交後JobTracker會把此調用方法內部TaskScheduler變量中,而後進行調度。看成業被調度執行時,JobTracker會建立一個表明這個做業的JobInprogress對象。JobInProgress對象的initTasks函數會對人物進行初始化。 變量
① 從HDFS中讀取做業對應的Job.split; 配置
② 建立並初始化Map和Reduce任務 循環
③ 初始化兩個task; 程序
三、 分配任務:
taskTracker做業爲一個單獨的JVM執行一個簡單的循環。主要實現每隔一段時間向jobTracker發送心跳:告訴JobTracker此TaskTracker是否存活,是否準備執行新的任務。JobTracker接受到心跳信息。若是有待分配任務。它就會爲TaskTracker分配一個任務並將分配信息封裝在新掉通訊的返回值中返回給TaskTracker;
四、 執行任務:
TaskTracker申請到新的任務以後,就要在本地運行任務了。運行任務的第一步是
任務本地化—將任務運行所須要的數據配置信息、程序代碼從HDFS複製到TaskTracker本地;
五、 更新任務執行進度和狀態
經過心跳通訊機制,全部TaskTracker的統計信息都會彙總到JobTracker處JobClient經過每秒查看JobTracker來接受做業進度的最新狀態。