2017-06-03 28 views
1

例如在字計數工作, 我有2名映射器映射器A和B.映射在reducer任務中調用reduce函數之前發生洗牌嗎?

映射器A的輸出是:{hi,1},{hello,1},{hey,1}

映射器B的輸出是:{hi,1},{bye,1},{hey,1}

假設,沒有組合器和1級減速器

然後,首先,混洗髮生

這樣,在洗牌兩個MAPP的輸出ERS合併並將得到的是:

{hi,[1,1]},{hello,1},{hey,[1,1]},{bye,1} 

然後排序發生的情況:

{bye,1},{hello,1},{hey,[1,1]},{hi,[1,1]} 

則減少函數在減速器任務被調用這使得O/P爲:

bye,2 
hello,1 
hey,2 
hi,2 

上述過程是否正確?並且在調用reduce函數之前進行洗牌?或者調度器只是將來自不同映射器的數據聚集在一起,但不會將數據與相同的鍵一起分組,並且這個過程發生在排序後?爲什麼在這裏排序有用?

回答

0

是,洗牌(和排序)被稱爲減少方法之前執行。

注: 但是,如果您指定零級減速器(setNumReduceTasks(0)),然後洗牌和排序沒有全部執行。

相關問題