Hadoop MapReduce的工作流程

2022-09-07 10:27:08 字數 2176 閱讀 4099

客戶端,提交mapreduce作業;

yarn資源管理器,負責協調集群上計算機資源的分配;

yarn節點管理器,負責啟動和監視集群中機器上的計算容器(container);

分布式檔案系統,用來和其他實體間共享作業檔案。

作業的提交;

作業的初始化;

任務的分配;

任務的執行;

進度和狀態的更新;

作業的完成

jobsummiter向資源管理器請求乙個應用id,用於mapreduce作業;

檢查作業的輸出說明,若未指定輸出目錄或輸出目錄已存在,則先不提交作業,錯誤拋回給mapreduce程式;

計算作業的輸入分片,若由於某些原因(比如指定的輸入路徑不存在)導致無法計算分片,錯誤拋回給mapreduce程式;

將執行作業所需要的資源(包括jar檔案,配置檔案和計算所得的輸入分片)複製到乙個以作業id命名的目錄下的共享檔案系統中。作業jar的複本較多(由mapreduce.client.submit.file.replication屬性控制),因此在執行作業的任務時,集群中有很多個複本可供節點管理器訪問;

接受來自共享檔案系統的輸入分片;

對每乙個分片建立乙個map任務以及確定多個reduce物件,分配任務id;

首先為map任務發出請求,高於reduce任務請求。因為所有的map任務必須在reduce的排序階段能夠啟動前完成。

請求為任務指定記憶體需求和cpu數。

通過與節點管理器通訊來啟動容器,在這之前完成任務所需資源的本地化,包括作業的配置檔案和快取檔案等。

輸出已處理輸入所佔比例;

輸出進度報告。

將map輸出作為輸入傳給reduce的過程叫做shuffle。

map函式開始輸出時並不是簡單的寫到磁碟,每個map任務都有乙個環形記憶體緩衝區用於儲存任務輸出。在預設情況下,緩衝區的大小為100mb,可通過mapreduce.task.io.sort.mb屬性調整,當緩衝區內容達到閾值,乙個後台執行緒便開始把內容溢位到磁碟,在溢位寫到磁碟過程中,map輸出繼續寫道緩衝區,但如果在此期間緩衝區被填滿,map會被阻塞直到寫磁碟過程完成。

寫磁碟之前,執行緒會根據最終的reducer把資料劃分為相應的分割槽,在每個分割槽中後台執行緒按鍵進行記憶體中排序,如果有乙個combiner函式,它就在排序後的輸出上執行,這會使得map輸出結果更緊湊,因此減少磁碟的資料寫入和傳輸。

在map任務寫完其最後乙個輸出記錄之後,會對溢位檔案進行合併成已分割槽且排序的輸出檔案,配置屬性mapreduce.task.io.sort.factor控制一次合併多少,預設為10;

執行map任務的tasktraker需要為分割槽執行其reduce任務,並且reduce任務需要集群上若干個map任務的map輸出作為特殊的分割槽檔案,每個map任務完成時,reduce任務就開始複製其輸出,這就是reduce任務的複製階段。控制複製執行緒數量的設定是mapreduce.reduce.shuffle.parallecopies屬性。

複製完所有map輸出後,reduce任務進入到合併階段。這個階段將合併map輸出,維持其順序排序,這是迴圈進行的。

記憶體緩衝區大小mapreduce.task.io.sort.mb;

記憶體緩衝區溢位閾值 mapreduce.map.sort.spill.percent;

排序檔案合併檔案個數 mapreduce.task.io.sort.factor;

執行combine所需最少溢位檔案數 mapreduce.map.combine.minspills;

是否壓縮map輸出 mapreduce.map.output.compress;

mapreduce.reduce.shuffle.parallelcopies,複製map輸出的執行緒數;

mapreduce.reduce.shuffle.maxfetchfailures, 宣告失敗前獲取乙個map檔案reducer所花的最大時間;

mapreduce.task.io.sort.factor;

mapreduce.reduce.shuffle.input.buffer.percent shuffle複製階段分配給map輸出的緩衝區占堆空間的百分比;

mapreduce.reduce.shuffle.merge.percent, map輸出緩衝區閾值,用於合併輸出和磁碟溢位的過程;

mapreduce.reduce.merge.inmem.threshold 合併輸出和磁碟溢位寫過程的map輸出的閾值數,0或者更小的數意味著沒有閾值限制。

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...