2014-10-28 35 views
0

假設我有一個工作,其中有一些mapper和多個reduce任務。映射器輸出的鍵類型是WritableComparable。即,對於字數例子,讓我們說我有字符串:使用多個reducer時,Hadoop中的鍵/值對如何分佈?

「FOO FOO巴富bletch QUUX欄」

當使用單詞的一個關鍵,是「富」總是發給同一減少還是有可能多個減速器收到「foo」?

回答

0

正如其他答案中提到的那樣,MapReduce總是將鍵值對傳遞給reducer,使得與同一個鍵相關的所有值都傳遞給同一個reducer。

實際情況是,在分區階段,散列函數應用於這些密鑰,因此它們會使用散列發送到減速器。因此所有類似的鍵最終都會進入同一個縮減器。

0

MapReduce總是將鍵值對傳遞給縮減器,以使與同一個鍵相關的所有值都到達同一個縮減器。這是在MapReduce期間通過partitioner階段完成的。

因此,與foo關聯的所有值都將轉到相同的縮減器。

0

Hadoop執行所有映射任務的輸出,然後將具有相同鍵的所有映射器輸出傳輸到同一個reducer任務。這被稱爲「洗牌」。因此,一個Reducer任務可能會處理所有「foo」映射器結果,而另一個正在處理所有「bar」映射器結果。如果「foo」或「bar」是由映射器發出的鍵,那麼多個reducer將永遠不會收到「foo」。

相關問題