好程式設計師大資料培訓分享Hadoop的shuffle過程

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

   好程式設計師大資料培訓分享 Hadoop shuffle 過程 ,對大資料感興趣想要學習或者是想要加入到大資料行業的小夥伴們就隨小編一起來看一下吧。

   Hadoop shuffle 過程就是從 map 端輸出到 reduce 端輸入之間的過程,這一段應該是 Hadoop 中最核心的部分,因為涉及到 Hadoop 中最珍貴的網路資源,所以 shuffle 過程中會有很多可以調節的引數,也有很多策略可以研究。這裡沒有對 shuffle 做深入的分析,也沒有讀原始碼,只是根據資料和使用的一些理解。

   map 端:

   map 過程的輸出是寫入本地磁碟而不是 HDFS ,但是一開始資料並不是直接寫入磁碟而是緩衝在記憶體中,快取的好處就是減少磁碟 I/O 的開銷,提高合併和排序的速度。預設的記憶體緩衝大小是 100M( 可以配置 ) ,所以在書寫 map 函式的時候要儘量減少記憶體的使用,為 shuffle 過程預留更多的記憶體,因為該過程是最耗時的過程。

   當緩衝的記憶體大小使用超過一定的閾值( 預設 80%) ,一個後臺的執行緒就會啟動把緩衝區中的資料寫入 (spill) 到磁碟中,往記憶體中寫入的執行緒繼續寫入知道緩衝區滿,緩衝區滿後執行緒阻塞直至緩衝區被清空。

   在資料spill 到磁碟的過程中會有一些額外的處理,呼叫 partition 函式、 combine 函式 ( 如果設定 ) 、對資料進行排序 ( key 排序 ) 。如果發生多次磁碟的溢位寫,會在磁碟上形成幾個溢位寫檔案,在 map 過程結束時,要將這些檔案進行合併生成一個大的分割槽的排序的檔案 ( 比較繞 )

   另外在寫磁碟的時候才用壓縮的方式將map 的輸出結果進行壓縮是減少網路開銷很有效的方法。

   reduce 端:

   reduce 端可能從 n map 的結果中獲取資料,而這些 map 的執行速度不盡相同,當其中一個 map 執行結束時, reduce 就會從 jobtractor 中獲取該資訊。 map 執行結束後 tasktractor 會得到訊息,進而將訊息彙報給 jobtractor reduce 定時從 jobtractor 獲取該資訊, reduce 端預設有 5 個執行緒從 map 端拖拉資料。

   同樣從map 端拖來的資料 (pull) 先寫到 reduce 端的快取中,同樣快取佔用到達一定閾值後會將資料寫到磁碟中,同樣會進行 partition combine 、排序等過程。如果形成多個磁碟檔案還會進行合併最後一次合併的結果作為 reduce 的輸入而不是寫入到磁碟中。

   reduce 的結果將會寫入到 HDFS ,如果執行任務的節點也是 HDFS 的一個節點,本地會儲存一個副本。



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

相關文章