MapReduce中的shuffle機制

2021-07-22 09:59:57 字數 975 閱讀 5129

shuffle機制是mapreduce整個處理過程中的核心機制,涉及到了分組、排序、資料快取以及中間結果傳遞(map結果怎麼交付給reduce),其整個過程可以用一張圖表示。

當沒有自定義分組時,預設所有的key在乙個分組中。如果有自定義分組,則按照自定義的分組邏輯進行分組,對應圖中的partitions,乙個分組為乙個partition。從圖中可以看出乙個partition被傳遞到乙個reduce進行處理,也即有多少個partition就有多少個reduce程序。

此外,input split表示輸入切片,mapreduce的輸入路徑是乙個資料夾,程式預設讀資料夾中的所有檔案,這些檔案在集群中是分散到多個datanode進行儲存的,乙個檔案對應乙個map程序。

mapreduce程式在map、reduce過程中都有涉及到排序操作。

如圖中map過程中的partition,sort,指的就是分組和排序,排序是按照map程式的key進行排序,key的資料型別都需要實現writablecomparable介面,具體的排序邏輯是按照key類中的compareto方法。map排序的最終結果是對於該輸入切片,資料按照分組邏輯進行分組後,每個分組中的資料也是有序的。

如果有多個分組和多個切片,那麼同乙個reduce接收的是來自各個map的處理結果,這些結果放在一起來看只是區域性有序,因此在合併過程中需要再一次排序,這個排序仍然是按照map中的key。

map在處理過程中的輸出結果(context.write())首先放在記憶體中,當分配的可用記憶體(可以通過配置檔案指定,預設為100m)被佔滿時會溢位到磁碟,對應圖中的spill to disk,我們知道記憶體操作是很快的,磁碟就不然。因此,mapreduce程式執行時比較慢的(讀寫磁碟是原因之一)。

這裡牽涉到乙個記憶體調優的問題,如果mapreduce可用記憶體分配的大,那麼可能就不會溢位到磁碟或較少的溢位,整個map處理過程就比較快。

MapReduce中的排序

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

mapReduce中的shuffle過程

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

MapReduce中的map個數

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