2010-03-11 23 views
4

我一直在學習mapreduce算法以及它如何可能擴展到數百萬臺機器,但我不明白如何在映射階段之後對中間鍵進行排序可以縮放,因爲會有:用於排列映射精簡中間鍵的網絡帶寬瓶頸?

1,000,000 x 1,000,000

:潛在的機器將中間結果的小鍵/值對彼此進行通信?這不是瓶頸嗎?

回答

6

確實Hadoop MapReduce的瓶頸之一是集羣上的機器之間的網絡帶寬。但是,每個映射階段的輸出不會發送到羣集中的每臺計算機。

地圖和縮小功能的數量由您正在運行的作業定義。每個映射處理其輸入數據,對其進行排序以將鍵分組並將其寫入磁盤。該作業定義了您希望應用到地圖輸出的多少個縮減功能。

每個reduce都需要查看給定鍵的所有數據。因此,如果您爲該作業運行單個reduce,則需要將每個映射的所有輸出發送到正在運行該reduce的羣集中的節點。 Reduce運行之前,將來自每個映射的數據合併爲所有鍵。

如果使用多個縮減器,則映射對其輸出進行分區,每個縮減創建一個。分區被髮送到正確的reduce。這確保了給定密鑰的所有數據都由單個reduce處理。

爲了幫助減少需要通過網絡發送的數據量,您可以將組合函數應用於地圖輸出。這具有對地圖輸出執行減少的效果。因此,您可以最大限度地減少需要傳送到減速器的數據量,並加快整個作業的執行時間。

+0

嗯,這個組合似乎是我應該進一步理解這一點的地方。謝謝 – Zubair 2010-03-13 16:49:54

+0

使用聯合收割機可大規模地幫助完成工作。它們出現在地圖的內存輸出中,因此它們也減少了地圖寫入磁盤所需的數據量。 – 2010-03-13 17:05:33