11
當我使用COGROUP代替豬加入時,是否有任何優勢(wrt性能/沒有map減少)?在豬中加入vs COGROUP
http://developer.yahoo.com/hadoop/tutorial/module6.html討論他們產生的輸出類型的差異。但是,忽略「輸出模式」,在性能方面是否存在顯着差異?
當我使用COGROUP代替豬加入時,是否有任何優勢(wrt性能/沒有map減少)?在豬中加入vs COGROUP
http://developer.yahoo.com/hadoop/tutorial/module6.html討論他們產生的輸出類型的差異。但是,忽略「輸出模式」,在性能方面是否存在顯着差異?
沒有主要的性能差異。我這樣說的原因是他們最終都是一個單一的MapReduce作業,它將相同的數據發送給reducer。兩者都需要將所有記錄向前發送,其中密鑰是外鍵。如果有的話,COGROUP
可能會更快一些,因爲它不會將笛卡爾產品穿過命中並將其保存在單獨的袋子中。
如果其中一個數據集很小,則可以使用名爲"replicated join"的聯接選項。這將在所有地圖任務中分配第二個數據集並將其加載到主內存中。這樣,它可以在映射器中完成整個連接,而不需要還原器。根據我的經驗,這是非常值得的,因爲連接和組合的瓶頸在於將整個數據集轉移到還原器。就我所知,你不能用COGROUP
來做到這一點。
在內部,join和cogroup在Pig中是一樣的(並且沒有在連接中進行笛卡爾連接,不確定你的意思)。只有最終結果的格式會根據您使用的關鍵字而變化。嘗試「描述」加入的結果 - 您會在解釋計劃中看到COGROUP運算符。 – SquareCog
我的意思是笛卡爾積,如果外鍵有多個匹配,你會得到更多的記錄。例如,如果一個數據集中有3個「abcde」,然後是第二個數據集中的4個「abcde」,則它會輸出12個記錄,因爲它們會匹配每個記錄。與此同時,在COGROUP,它保持關係獨立。 –