MapReduce中Shuffle過程整理

2021-07-15 09:42:28 字數 788 閱讀 5094

mapreduce中的shuffle過程分為map端和reduce端兩個過程。

map端:

1.(hash partitioner)執行完map函式後,根據key進行hash,並對該結果進行reduce的數量取模(該鍵值對將會由某個reduce端處理)得到乙個分割槽號。

2.(sort combiner)將該鍵值對和分割槽號序列化之後的位元組寫入到記憶體快取區(大小為100m,裝載因子為0.8)中,當記憶體緩衝區的大小超過100*0.8 = 80m的時候,將會spill(溢位);在溢位之前會在記憶體緩衝區中對 該鍵值對和分割槽號序列化之後的位元組 進行排序,並合併緩衝區中key相同的key-value對。

3.(merge)對於map結果有多個spill檔案的情況,會將這些檔案再進行一次合併,合併每個spill檔案中key相同的key-value對,然後形成一些新的檔案並刪除spiil檔案(注意:map端的輸出檔案儲存在本地磁碟上,而不是在hdfs上);對只有乙個spill檔案的情況,直接結束map端的shuffle。

reduce端:

1. (copy)從每個map端使用http拷貝需要的檔案

2. (merge)對於從每個map端得到的檔案進行在記憶體(該記憶體不僅僅是100m,而是jvm中堆的大小,因為此時不執行reduce任務,jvm的記憶體可以全部讓merge使用)中合併,合併每個檔案中key相同的key-value對,將結果儲存在記憶體或者hdfs上,作為reduce函式的輸入。

1. 2. 

MapReduce中的排序

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

MapReduce中的shuffle機制

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

mapReduce中的shuffle過程

從map 的輸出到reduce 的輸入,中間的過程被稱為shuffle過程。map side 1.在寫入磁碟之前,會先寫入環形緩衝區 circular memory buffer 預設100m mapreduce.task.io.sort.mb可修改 當緩衝區內容達到80m mapre duce.m...