mapReduce中的shuffle過程

2021-08-04 11:35:34 字數 1022 閱讀 2230

從map()的輸出到reduce()的輸入,中間的過程被稱為shuffle過程。

map side

1.在寫入磁碟之前,會先寫入環形緩衝區(circular memory buffer),預設100m(mapreduce.task.io.sort.mb可修改),當緩衝區內容達到80m(mapre

duce.map.sort.spill.percent可修改),緩衝區內容會被溢寫到磁碟,形成乙個spill file檔案

2.分割槽:在寫入磁碟之前,會先進分割槽(partition),而partition的數量是由reducer的數量決定的

job.setnumreducetasks(2);

預設是用map輸出的中key的hashcode對numreducetasks的個數取餘,相同的分到乙個區

3.排序:在每乙個partition中,都會有乙個sort by key

4.combiner:如果有combiner function,在sort之後會執行combiner

,相當於map階段的rudece 【滿足數**算的交換律和結合律】

5.merge:數個spill files會合併(merge成乙個分過區的排過序的檔案

6.compress壓縮the map output

mapreduce.task.io.sort.factor

一次性合併小檔案的數量 預設10個

mapreduce.map.output.compress

啟用壓縮,預設是false

org.apache.hadoop.io.compress.defaultcodec

預設使用的壓縮演算法

reduce side

1.解壓縮:如果在map side 已經壓縮過,在合併排序之前要先進行解壓縮

2.sort phase(merge)

3.group phase:將相同key的value分到一組,形成乙個集合

MapReduce中的排序

hadoop的計算模型就是map reduce,每乙個計算任務會被分割成很多互不依賴的map reduce計算單元,將所有的計算單元執行完畢後整個計算任務就完成了。因為計算單元之間互不依賴所以計算單元可以分配到不同的計算機上執行,這樣就可以將計算壓力平攤到多個機器上面。當然效能線性提高是有條件的,前...

MapReduce中的shuffle機制

shuffle機制是mapreduce整個處理過程中的核心機制,涉及到了分組 排序 資料快取以及中間結果傳遞 map結果怎麼交付給reduce 其整個過程可以用一張圖表示。當沒有自定義分組時,預設所有的key在乙個分組中。如果有自定義分組,則按照自定義的分組邏輯進行分組,對應圖中的partition...

MapReduce中的map個數

在map階段讀取資料前,fileinputformat會將輸入檔案分割成split。split的個數決定了 map的個數。影響map個數 split個數 的主要因素有 1 檔案的大小。當塊 dfs.block.size 為128m時,如果輸入檔案為128m,會被劃分為1個split 當塊為256m,...