Hadoop入门(七)Mapreduce高级Shuffle
一、Shuffle概述
Reduce階段三個步驟,Shuffle就是一個隨機、洗牌操作
?
Shuffle是什么
針對多個map任務的輸出按照不同的分區(Partition)通過網絡復制到不同的reduce任務節點上,這個過程就稱作為Shuffle。
?
二、Shuffle過程
(1)Map端
1)在map端首先是InputSplit,在InputSplit中含有DataNode中的數據,每一個InputSplit都會分配一個Mapper任務,Mapper任務結束后產生<K2,V2>的輸出,這些輸出先存放在緩存中,每個map有一個環形內存緩沖區,用于存儲任務的輸出。默認大小100MB(io.sort.mb屬性),一旦達到閥值0.8(io.sort.spil l.percent),一個后臺線程就把內容寫到(spill)Linux本地磁盤中的指定目錄(mapred.local.dir)下的新建的一個溢出寫文件。
2)寫磁盤前,要進行partition、sort和combine等操作。通過分區,將不同類型的數據分開處理,之后對不同分區的數據進行排序,如果有Combiner,還要對排序后的數據進行combine。等最后記錄寫完,將全部溢出文件合并為一個分區且排序的文件
3)最后將磁盤中的數據送到Reduce中,圖中Map輸出有三個分區,有一個分區數據被送到圖示的Reduce任務中,剩下的兩個分區被送到其他Reducer任務中。而圖示的Reducer任務的其他的三個輸入則來自其他節點的Map輸出。
(2)Reduce端
1)Copy階段
Reducer通過Http方式得到輸出文件的分區。
reduce端可能從n個map的結果中獲取數據,而這些map的執行速度不盡相同,當其中一個map運行結束時,reduce就會從JobTracker中獲取該信息。map運行結束后TaskTracker會得到消息,進而將消息匯報給JobTracker,reduce定時從JobTracker獲取該信息,reduce端默認有5個數據復制線程從map端復制數據
2)Merge階段
如果形成多個磁盤文件會進行合并
從map端復制來的數據首先寫到reduce端的緩存中,同樣緩存占用到達一定閾值后會將數據寫到磁盤中,同樣會進行sort、group等過程。如果形成了多個磁盤文件還會進行合并,最后一次合并的結果作為reduce的輸入而不是寫入到磁盤中
3)Reducer的參數
最后將合并后的結果作為輸入傳入Reduce任務中
?
三、Hadoop中的壓縮
Shuffle過程中看到,map端在寫磁盤的時候采用壓縮的方式將map的輸出結果進行壓縮是一個減少網絡開銷很有效的方法
解壓縮算法的實現
Codec Codec是Hadoop中關于壓縮,解壓縮的算法的實現,在Hadoop中,codec由CompressionCode的實現來表示
MapReduce的輸出進行壓縮 輸出屬性如下所示
在Java中設置輸出壓縮
reduce端輸出壓縮使用了Codec中的Gzip算法,也可以使用bzip2算法
?
?
總結
以上是生活随笔為你收集整理的Hadoop入门(七)Mapreduce高级Shuffle的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 组装电脑电源如何选择电脑如何配电源
- 下一篇: 杂牌电源对电脑影响大吗杂牌电源对电脑的影