Hadoop Mapreduce執行流程

2021-10-01 12:51:40 字數 1875 閱讀 9336

整個 hadoop mapreduce 的作業執行流程如圖所示

客戶端向 jobtracker 提交作業。首先,使用者需要將所有應該配置的引數根據需求配置好。作業提交之後,就會進入自動化執行。在這個過程中,使用者只能監控程式的執**況和強制中斷作業,但是不能對作業的執行過程進行任何干預。提交作業的基本過程如下。

1)客戶端通過 runjob() 方法啟動作業提交過程。

2)客戶端通過 jobtracker 的 getnewjobid() 請求乙個新的作業 id。

3)客戶端檢查作業的輸出說明,計算作業的輸入分片等,如果有問題,就丟擲異常,如果正常,就將執行作業所需的資源(如作業 jar 檔案,配置檔案,計算所得的輸入分片等)複製到乙個以作業 id 命名的目錄中。

4)通過呼叫 jobtracker 的 submitjob() 方法告知作業準備執行。

jobtracker 在 jobtracker 端開始初始化工作,包括在其記憶體裡建立一系列資料結構,來記錄這個 job 的運**況。

1)jobtracker 接收到對其 submitjob() 方法的呼叫後,就會把這個呼叫放入乙個內部佇列中,交由作業排程器進行排程。初始化主要是建立乙個表示正在執行作業的物件,以便跟蹤任務的狀態和程序。

2)為了建立任務執行列表,作業排程器首先從 hdfs 中獲取 jobclient 已計算好的輸入分片資訊,然後為每個分片建立乙個 maptask,並且建立 reducetask。

jobtracker 會向 hdfs 的 namenode 詢問有關資料在哪些檔案裡面,這些檔案分別散落在哪些結點裡面。jobtracker 需要按照「就近執行」原則分配任務。

tasktracker 定期通過「心跳」與 jobtracker 進行通訊,主要是告知 jobtracker 自身是否還存活,以及是否已經準備好執行新的任務等。

jobtracker 接收到心跳資訊後,如果有待分配的任務,就會為 tasktracker 分配乙個任務,並將分配資訊封裝在心跳通訊的返回值中返回給 tasktracker。

對於 map 任務,jobtracker 通常會選取乙個距離其輸入分片最近的 tasktracker,對於 reduce 任務,jobtracker 則無法考慮資料的本地化。

1)tasktracker 分配到乙個任務後,通過 hdfs 把作業的 jar 檔案複製到 tasktracker 所在的檔案系統,同時,tasktracker 將應用程式所需要的全部檔案從分布式快取複製到本地磁碟。tasktracker 為任務新建乙個本地工作目錄,並把 jar 檔案中的內容解壓到這個資料夾中。

2)tasktracker 啟動乙個新的 jvm 來執行每個任務(包括 map 任務和 reduce 任務),這樣,jobclient 的 mapreduce 就不會影響 tasktracker 守護程序。任務的子程序每隔幾秒便告知父程序它的進度,直到任務完成。

乙個作業和它的每個任務都有乙個狀態資訊,包括作業或任務的執行狀態,map 任務和 reduce 任務的進度,計數器值,狀態訊息或描述。任務在執行時,對其進度保持追蹤。

這些訊息通過一定的時間間隔由 childjvm 向 tasktracker 匯聚,然後再向 jobtracker 匯聚。jobtracker 將產生乙個表明所有執行作業及其任務狀態的全域性檢視,使用者可以通過 web ui 進行檢視。jobclient 通過每秒查詢 jobtracker 來獲得最新狀態,並且輸出到控制台上。

當 jobtracker 接收到的這次作業的最後乙個任務已經完成時,它會將 job 的狀態改為「successful」。當 jobclient 獲取到作業的狀態時,就知道該作業已經成功完成,然後 jobclient 列印資訊告知使用者作業已成功結束,最後從 runjob() 方法返回。

[參考文件](

hadoop map reduce 階段筆記

shuffle and sort mr 框架保證 每個 reducer 的輸入都是按照 key 鍵排過序的。shuffle 將map輸出結果送到reducer和排序的功能。1 map 每個map task將結果輸出到環形記憶體緩衝區,當到達一定閾值,則啟動乙個後台程序將快取中的資料 1 按照 red...

Hadoop MapReduce 效能優化

我們時常談論說到mapreduce時,我們都會說它是離線計算框架,磁碟io開銷大,job執行比較慢等等。這一篇部落格,南國系統回顧下mr程式執行慢的原因,以及如何優化mr程式。我們都知道mapreduce是離線計算框架,不同於spark記憶體計算框架模型。乙個標準的mr程式由map方法和reduce...

九 hadoop mapreduce分割槽

一 什麼時候分割槽?1 分割槽的實現 通過繼承partitioner類,實現getpartition方法。public int getpartition key key,value value,int reducetasknumber map結束後得到的每個key value都呼叫該方法,並把key...