好程式設計師大資料培訓分享MapReduce理解

好程式設計師發表於2020-11-26

   好程式設計師 大資料 培訓分享MapReduce 理解,本篇文章 就給大家分享一下大資料MapReduce 理解。

   為什麼需要MapReduce? 因為 MapReduce 可以“分而治之”,將計算大資料的複雜任務分解成若干簡單小任務。“簡單”的意思是:計算規模變小、就近節點計算資料、並行任務。

   一句話版本:

   輸入檔案 -> map 任務】 split --> map --> partition --> sort --> combine( 寫記憶體緩衝區 ) ~~ spill( 獨立執行緒寫磁碟 ) --> merge --> map 輸出結果 ~~~ reduce 任務】 copy --> merge -->reduce --> 輸出檔案

   M map 任務開始並處理分配到的多個 split 資料。

   Partition

   作用:將map 階段的輸出分配給相應的 reducer partition == reducer

   預設是HashPartitioner 。之後將輸出資料寫入記憶體緩衝區 memory buff

   spill:

   memory buff 的資料到達一定閾值時,預設 80% ,將出發溢寫 spill ,先鎖住這 80% 的記憶體,將這部分資料寫進本地磁碟,儲存為一個臨時檔案。此階段由單獨執行緒控制,與寫 memory buff 執行緒同步進行。

   sort & combine

   spill 寫檔案之前,要對 80% 的資料 ( 格式 ) 進行排序,先 partition key ,保證每個分割槽內 key 有序,如果 job 設定了 combine ,則再進行 combine 操作,將 這樣的資料合併成,最終輸出一個 spill 檔案。

   多個spill 檔案透過多路歸併排序,再合併成一個檔案,這是 map 階段的最終輸出。同時還有一個索引檔案 (file.out.index) ,記錄每個 partition 的起始位置、長度。

   reduce 階段:

   copy :多執行緒併發從各個 mapper 上拉屬於本 reducer 的資料塊 ( 根據 partition) ,獲取後存入記憶體緩衝區,使用率達到閾值時寫入磁碟。

   merge :一直啟動,由於不同 map 的輸出檔案是沒有 sort 的,因此在寫入磁碟前需要 merge ,知道沒有新的 map 端資料寫入。最後啟動 merge 對所有磁碟中的資料歸併排序,形成一個最終檔案作為 reducer 輸入檔案,至此 shuffle 階段結束。

   reduce :和 combine 類似,都是將相同的 key 合併計算,最終結果寫到 HDFS 上。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2737300/,如需轉載,請註明出處,否則將追究法律責任。

相關文章