2017-03-06 48 views
2

洗牌和排序階段是否在地圖任務結束之前出現,或者在地圖任務生成輸出之後出現,以便不再查看地圖任務。這是一個'Map only task'案例,我很困惑。 如果在Map only任務中沒有Shuffle並排序,有人可以解釋如何將數據寫入最終的輸出文件。是否會在地圖專用任務中進行隨機播放和排序?

+0

不應該在純地圖任務中洗牌。你爲什麼認爲那裏有? –

+0

@ cricket_007我不是說有或將會有。我在理解洗牌的概念時有點困惑,如果它出現在僅限地圖任務中,我也會對它進行排序。我爲這個問題添加了更多信息。希望能夠理解。 – Sidhartha

+0

洗牌發生在減速器和組合器中,爲什麼它會在地圖上發生? –

回答

3

當你有一個只有map的任務時,根本沒有洗牌,這意味着mappers會直接將最終的輸出寫入HDFS。另一方面,當你有一個完整的Map-Reduce程序,使用mapper和reducers時,是的,洗牌可以在reduce階段開始之前開始。

在SO引用this very nice answer

所有的洗牌首先是從 映射器的減速transfering數據的過程,所以我認爲這是明顯的,這是對減速必要 ,否則,他們將無法輸入任何 (或來自每個映射器的輸入)。即使在地圖階段完成之前 也可以開始混洗,以節省一些時間。這就是爲什麼當地圖 狀態還不是100%時,您可以看到 的減少狀態大於0%(但小於33%)。

希望這個答案澄清了你的困惑。

+1

感謝您的友好的話:)我只是想補充一下,在僅有地圖的作業情況下,每個mapper的輸出將不會被排序,而不是在reduce階段。在後一種情況下,映射器將在本地對輸出進行排序,並且reduce任務所需的相應映射輸出將在排序階段進行合併排序。 – vefthym

+1

@vefthym這是一個好點,它是默認情況下的工作原理。我想提一下,爲了禁用排序過程,即使存在縮減階段,也可以設置一些標誌,這將在需要排序時提高性能。 – dbustosp

+0

@dbustosp感謝您給予的澄清。我現在清楚地瞭解機制。 – Sidhartha