1)在mapreduce中,如何將Map階段處理過的數據轉移到reduce階段是mapreduce框架中最關鍵的過程,稱為shuffle;
2)洗牌:?洗牌和發牌(核心機制:數據分區、排序和緩存);
3)具體來說,將maptask輸出的處理結果數據分發到reducetask,在分發的過程中,將數據按key進行分區和排序。
洗牌結構
隨機緩存過程:
Shuffle是MR處理流程中的壹個過程,每個處理步驟都在各種map任務和reduce任務節點上完成。
2.4.3分區
如果number of reduceTask》:獲得分區的結果數,它將產生幾個空的輸出文件Part-R-000 xx;
如果1
如果reducetask的數量=1,則無論mapTask輸出多少個分區文件,最終結果都將提供給這個reduce task,並且只會生成壹個結果文件。零件-r-00000;
例如,如果自定義分區的數量是5,那麽
(1)job . setnumreducetasks(1);將正常運行,但會產生壹個輸出文件。
(2)job . setnumreducetasks(2);將報告壹個錯誤
(3)job . setnumreducetasks(6);如果大於5,程序將正常運行並生成壹個空文件。
2.4.5洗牌操作機制
2)詳細的流程說明
上述過程是整個mapreduce最完整的工作流程,但shuffle過程僅從步驟7開始,並在步驟16結束。具體洗牌過程詳述如下:
1)map task收集map()方法輸出的kv對,並將它們放入內存緩沖區。
2)本地磁盤文件不斷從內存緩沖區溢出,並且可能會溢出多個文件。
3)多個溢出文件將合並成壹個大的溢出文件。
4)在溢出和合並過程中,應調用分割器對鍵進行分組和排序。
5)根據自己的分區號,reducetask去每個maptask機器獲取相應的結果分區數據。
6)reducetask將從同壹分區中的不同maptask獲取結果文件,reduce task將再次合並這些文件(合並和排序)。
7)合並成壹個大文件後,shuffle的過程結束,然後進入reducetask的邏輯操作過程(從文件中取出壹個鍵值對組,調用自定義的reduce()方法)。
集中註意力
緩沖區中緩沖區的大小會影響mapreduce程序的執行效率。原則上,緩沖區越大,磁盤io數量越少,執行速度越快。
緩沖區的大小可以通過參數來調整:io.sort.mb?默認值為100米
合並器合並
1)組合器是MR程序中除映射器和縮減器之外的組件。
2)2)組合器組件的父類是Reducer。
3)3)組合器和減速器的區別在於其運行位置:
Combiner在maptask所在的每個節點上運行。
Reducer是接收世界上所有Mapper的輸出結果;
4)4)combiner的意義是在本地匯總每個maptask的輸出以減少網絡傳輸。
6)組合器可以應用的前提是不能影響最終的業務邏輯,組合器的輸出kv應與減速器的輸入kv類型相對應。
制圖人