4

某些操作(如中位數和平均值)是不可交換的。在這種情況下,似乎只能有一個減速器,因爲減速器需要具有全局視圖。 map-reduce中是否有可以並行執行的非交換reducer?遇到非交換操作時,人們是否真的使用map-reduce?或者只是在一些非常強大的機器上運行它?是否有常見的方法將非交換操作分解爲交換操作?mapreduce中是否有可以並行執行的非交換reducer?

感謝

+0

這裏有一些討論這裏http://clojure.com/blog/2012/05/08/reducers-a-library-and-model-for-collection-processing.html – 2014-02-07 14:15:08

+0

相關問題在這裏http:///stackoverflow.com/questions/11731770/combiner-and-reducer-can-be-different – 2014-02-07 14:19:50

回答

1

我不知道「交換」是在這裏使用合適的詞,但我明白你在說什麼。

在hadoop中,後貼圖階段實際上分爲兩個步驟:一個Combiner和一個Reducer,具有相同的簽名。 Combiner在映射器上運行,以在輸出密鑰並將其發送給reducer之前減少輸出的大小。如果你只是指定一個Reducer,那麼它將用於兩者;但是你可以將它們分開,做得比你想象的還要驚人。

做計數操作的簡單情況下使用的計數減速機,其可用於結合步驟和減少步驟兩者。這樣可以減少多次將相同的密鑰通過線路發送的需要。

可以實現類似的效率,通過定義不同的組合和減速器計算的平均值。例如,映射器輸出對應於數值和的1的計數的值(number, 1)該組合可以映射值到任何一個(sum, count)元組或(mean, count)元組的集合,和減速器可以使用計數的權重以產生聚合這些平均。 (另外:使用Kahan summation可以大大減少添加大量數字的錯誤)。這就允許映射器完成一些組合,就像在一個簡單的計數例子中一樣。

你可以做很多聰明的事情在一個單一的map-reduce一步。但是,我不認爲中位數是可能的。在這種情況下,您實際上必須通過一臺機器的狀態發送所有數字。

+0

嗨@Andrew_Mao,感謝您的重播。所以,我想你的意思是我們可以假定減速器是「交換的」(請讓我知道在這種情況下是否有更好的詞)?否則(比如說中位數),我們可以啓動一個只有地圖的作業,並在一臺機器上執行reduce部分。 – 2013-02-14 06:55:34

+0

嗨,我不明白你的問題「我們可以假定減速器是可交換的」。一個交換操作符意味着它對操作數的順序不敏感,而在這裏我們正在討論能夠使用同一個reducer來進行組合和縮減,或者需要不同的來獲得結果的區別。順便說一下,其他人已經討論了中值的近似值:http://stackoverflow.com/questions/6968215/find-median-of-a-large-integer-set-using-mapreduce,http://stackoverflow.com/問題/ 10109514 /計算的中值在-的map-reduce – 2013-02-14 07:37:49

相關問題