2016-10-04 19 views
0

根據我的理解,mapper先運行partitioner(如果有的話),然後運行Reducer。但是如果我們使用Partitioner類,我不確定Sorting和Shuffling階段何時運行?當分區程序在Map Reduce中運行時?

+3

Map→Partitioner→Sort→Shuffle→Sort→Reduce https://0x0fff.com/hadoop-mapreduce-comprehensive-description/ – cody123

回答

0

近觀

下圖說明了完整的詳細信息。

從此圖中,您可以看到Word Count應用程序的映射器和縮減器組件的位置,以及它如何實現其目標。現在我們將仔細研究這個系統。 MapReduce的流動

enter image description here

0

洗牌和排序階段將總是執行(跨越映射器和減速器節點)。

在MapReduce的不同階段的層次結構如下:

地圖 - >分區 - >合(可選) - >隨機和排序 - >減少。

0

簡短的回答是:數據在減速器排序運行時,混洗/之前排序運行減速器(總是)和後的地圖/組合器(如果有的話)/分割器(如果有的話)。

長的答覆是,爲MapReduce工作有4名主力隊員: 映射分區程序減速。所有這些都是您可以通過自己實現的類。

讓我們著名的字計數程序,假設我們工作包含分割:

pippo, pluto, pippo, pippo, paperino, pluto, paperone, paperino, paperino 

每個字的記錄。

映射

每個映射器運行在你的文件的一個子集,它的任務是讀取分割每個記錄和鍵指定給每個記錄將輸出。 映射器將在磁盤(本地磁盤)上存儲中間結果。

從該階段的中間輸出將是

pippo,1 
pluto,1 
pippo,1 
pippo,1 
peperino,1 
pluto,1 
paperone,1 
paperino,1 
paperino,1 

在此將被存儲它運行映射器節點的本地磁盤上。

這是一個小型減速器和可聚合的數據。它也可以運行連接,即所謂的map-join。此對象有助於節省帶寬到羣集中,因爲它聚合了本地節點上的數據。

從組合,它仍然是映射器階段的一部分的輸出,將是:

pippo,3 
pluto,2 
paperino,3 
paperone,1 

當然這裏是從一個節點的數據。現在我們必須將數據發送給減速器才能獲得全局結果。哪個Reducer將處理記錄取決於分區器。

分區程序

它的任務是在所有可用的減速傳播數據。該對象將讀取組合器的輸出,並將選擇將處理密鑰的減速器。

在這個例子中,我們有兩個減速器,我們使用以下規則:

all the pippo goes to reducer 1 
all the pluto goes to reducer 2 
all the paperino goes to reducer 2 
all the paperone goes to reducer 1 

所以所有的節點將發送具有關鍵皮波相同的減速記錄(1),所有的節點將發送其中有鑰匙冥王星一樣減速器(2)中的記錄等等...

這裏就是數據得到洗牌/排序,而且由於組合已經降低了本地數據,該節點必須只發送4條記錄而不是9條。

減速

這個對象能夠從每個節點彙總數據,它也能夠對數據進行排序。

相關問題