好程式設計師大資料培訓分享Hadoop的shuffle過程
好程式設計師大資料培訓分享 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師大資料培訓分享:Hadoop叢集同步程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享之hive儲存過程程式設計師大資料Hive儲存過程
- 好程式設計師大資料培訓分享Hadoop分散式叢集程式設計師大資料Hadoop分散式
- 好程式設計師大資料培訓分享Hadoop入門進階程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享Hadoop怎樣處理資料?程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享Hadoop技術優缺點程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享常見的Hadoop和Spark專案程式設計師大資料HadoopSpark
- 好程式設計師大資料培訓分享MapReduce理解程式設計師大資料
- 好程式設計師大資料培訓分享大資料的應用程式設計師大資料
- 好程式設計師大資料培訓分享Hadoop入門學習線路圖程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享HBase Filter過濾器概述程式設計師大資料Filter過濾器
- 好程式設計師大資料培訓分享HDFS讀流程程式設計師大資料
- 好程式設計師大資料培訓分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料培訓分享大資料的影響一程式設計師大資料
- 好程式設計師大資料培訓分享大資料還學嗎?程式設計師大資料
- 好程式設計師大資料培訓分享mysql資料型別程式設計師大資料MySql資料型別
- 好程式設計師大資料培訓之Hadoop常見問題程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享大資料兩大核心技術程式設計師大資料
- 好程式設計師大資料培訓簡述Hadoop常見問題程式設計師大資料Hadoop
- 好程式設計師Java培訓分享Java類載入的過程概述程式設計師Java
- 好程式設計師大資料培訓分享大資料就業方向有哪些?程式設計師大資料就業
- 好程式設計師大資料培訓分享大資料面試寶典三程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典四程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典六程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典一程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典二程式設計師大資料面試
- 好程式設計師大資料培訓分享settings和mapping的意義程式設計師大資料APP
- 好程式設計師大資料培訓分享Spark技術總結程式設計師大資料Spark
- 好程式設計師大資料培訓分享MySQL8.0新特性程式設計師大資料MySql
- 好程式設計師大資料培訓分享之Ambari和ClouderaManager對比程式設計師大資料Cloud
- 好程式設計師大資料培訓分享如何區分Hive與HBase程式設計師大資料Hive
- 好程式設計師大資料培訓分享Spark需要什麼基礎?程式設計師大資料Spark
- 好程式設計師大資料培訓分享之MySQL資料庫SQL簡介程式設計師大資料MySql資料庫
- 好程式設計師大資料培訓分享之《MySQL資料庫》常用函式整理程式設計師大資料MySql資料庫函式
- 好程式設計師大資料培訓分享MySQL資料庫儲存引擎簡介程式設計師大資料MySql資料庫儲存引擎
- 好程式設計師大資料培訓分享之hive常用內部函式程式設計師大資料Hive函式
- 好程式設計師大資料培訓分享Hive基礎知識講解程式設計師大資料Hive
- 好程式設計師大資料培訓分享怎樣進行大資料入門學習程式設計師大資料