2013-04-23 61 views
5

是否可以在不同的縮減器上處理具有相同鍵的值?從所有的mappers我得到的數據具有相同的密鑰,我想用不同的reducer處理它?我的困惑是,書上說用相同的密鑰的所有值將前往同一減速...同樣重要的不同減速器(HADOOP)?

mapper1(k1,v1),mapper2(k1,v2),mapper3(k1,v3) and so on... 

我不希望所有的數據相同的減速......應該是這樣,

reducer1(k1,v1),reducer2(k1,v2).... 

和讓說reducer1產生SUM1和reducer2生產SUM2,我想這

sum=sum2+sum1 

我應該怎麼辦呢?

+0

有什麼理由,你爲什麼不能做上述使用組合..然後總結在減速器組合的輸出? – Suchet 2013-04-23 17:44:44

+0

在這假設我有非常大的數據(可以說我有一個矩陣中的行數很大,最後我想要所有元素的總和),我可以很容易地總結一下在組合器中的一個拆分現在如果想要總和整個我需要把所有組合器的輸出放在一個reduce中(我的方法是9),這會導致一個非常緩慢的過程... – Divyendra 2013-04-23 18:02:50

+0

您不受益於Hadoop的分佈式特性。對數據進行分區,以便更多映射器同時處理輸入文件。像這樣的問題是微不足道的。 – Suchet 2013-04-23 18:06:54

回答

4

具有相同鍵的數據將始終轉到同一個縮減器。但是你可以選擇任何你想要的鑰匙,所以如果你想要他們去不同的減速器,那麼只需選擇不同的鑰匙。

如果您希望根據縮減器的輸出執行其他組合,則必須執行另一個MapReduce作業,並將第一個作業的輸出作爲下一個作業的輸入。這可能變得很難看,所以你不妨看看CascadingPigHive來簡化事情。

+0

問題不是與映射器...他們將是多個,但是,如果我想要總和,那麼我將被迫使用一個reducer,在這種情況下,所有mapper輸出的一個reducer將使計算緩慢... PLZ如我錯了請糾正我 ? - – Divyendra 2013-04-23 18:21:49

+0

不,你是對的。只使用一個減速器很慢。但是,如果你希望你的最終答案是來自不同減速器的輸出的組合,你將不得不做另一個MR作業。如果你想要一個單一的值作爲結果,你將不得不在某一點只有一個減速器。試着將數據發送到該減速器儘可能小。 – 2013-04-23 18:41:32