2011-10-12 89 views
1

我讀MapRedcue的源代碼,以獲得更多的理解MapReduce的內部機制。我試圖瞭解在map階段生成的數據如何合併併發送以減少進一步處理的函數時遇到問題。源代碼看起來太複雜了,我只想知道它的概念。MapReduce的排序迭代

我想知道什麼是價值觀(如參數迭代器)是如何通過減少()函數之前排序。在MapTask.runOldReducer()中,它將通過傳遞RawKeyValueIterator來創建ReduceValuesIterator,其中將調用Merger.merge()並執行大量操作(例如,收集段)。閱讀代碼後,它似乎只會嘗試按鍵排序,並且伴隨該鍵的值將被聚合/收集而不被刪除。例如,圖()可以產生

 
    Key        Value 
    http://www.abcfood.com/aLink  object A 
    http://www.abcfood.com/bLink  object B 
    http://www.abcfood.com/cLink  object C 

然後在減少(),

密鑰將被http://www.abcfood.com/和值將包含對象A,對象B,及對象C.

因此,它是按鑰匙排序http://www.abcfood.com/?它是否正確?或者它是什麼排序,然後通過減少功能?

非常感謝。

+0

值從未在mapreduce中排序。你有完全錯誤的東西。 –

回答

1

假設這是您的輸入:

Key        Value 
http://www.example.com/asd  object A 
http://www.abcfood.com/aLink  object A 
http://www.abcfood.com/bLink  object B 
http://www.abcfood.com/cLink  object C 
http://www.example.com/t1  object X 

減速會得到這樣的:(有價值觀的順序沒有保證)

Key        Values 
http://www.abcfood.com/   [ "object A", "object C", "object B" ] 
http://www.example.com/   [ "object X", "object A" ] 
0

那麼,有沒有得到有序值的任何可能性減速器? 我需要使用排序值(計算通過鍵傳遞的值之間的差異)。我遇到了這個問題:) http://cornercases.wordpress.com/2011/08/18/hadoop-object-reuse-pitfall-all-my-reducer-values-are-the-same/

據我所知,這是壞的複製減速機的價值,然後命令他們。我可以得到內存溢出。在將KEY + Interable傳遞給reducer之前,我們會更好地對值進行排序。