2011-11-23 46 views
-1

對於map縮減操作中使用的任何鍵,具有can鍵的元素可能會遵循一些自然排序。如何解決地圖縮小體系結構中的順序問題?

假設我們想找到的元素e0e1這樣的:

    每個
  1. 屬於同一個鍵,
  2. 他們按照某種排序e0 < e1
  3. 沒有元素en其中e0 < en < e1關於我們的訂購。
  4. 保持e0e1之間的一些關係。

(How)可以用map reduce有效地完成嗎?

解決這個問題的常用數據庫方式只是將我們的訂單按順序排列在我們的集合上。跟蹤最後看到的元素,以及當前元素並測試關係。

地圖的問題減少,是一個減少呼叫減少e0e1內沒有笏知道如果en存在遺址的假設e0e1是連續的。

有沒有巧妙的解決方法呢?還是mapreduce框架可以保證reduce調用中的一組元素是順序的?它可以在MongoDB中完成嗎?

+1

我不確定我是否關注,您是否有興趣在地圖/縮小步驟中找到這些元素?或在減少步驟?如果第一個:map/reduce可以用於排序,那麼當然可以找到這樣一對。 – amit

+0

它似乎這樣做,你會需要儘可能多的內存或輔助存儲作爲數據。遊標/迭代器方法不需要額外的內存。你能否提供算法實現的鏈接?我似乎無法找到任何好的東西。 – z5h

+0

問題:「如何解決地圖縮小架構中的順序問題?」答:效率低下。 – Patrick87

回答

2

MapReduce是並行編程的範例。 Amdahl定律將由於並行化而實現的加速限制爲1 /(S + P/N),其中S和P是代碼的串行/並行部分的分數,並且N是處理器的數量。如果S = 1,則P = 0並且加速是1,即,對於使用任何數目N的處理器沒有益處(就計算時間而言)。所以如果你有一個「順序」(即100%不平行,就像計算一個非關聯約簡操作一樣)的工作,MapReduce永遠不會有任何幫助。注意:也許你的問題比你想象的更加平行。

1

您可以將排序選項傳遞給map-reduce。這應該得到你想要的: http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-Overview

但是,很難回答你的問題,沒有一個更具體的例子。

+0

對。這意味着我的減少投入將被排序,但這並不意味着我不會在任何特定的減少撥打電話時忽略我的'en'。 – z5h

0

您的案例的實際示例是點擊流分析,作爲網絡分析的一部分。

在這種實際的例子,我們發現,我們可以通過兩種方式在Hadoop中解決這個問題:

  1. 簡單地把所有的事件在內存中的減速器,在內存中對它們進行排序和做的工作。
  2. 使用名爲「二級排序」的hadoop功能,讓記錄以您選擇的排序順序到達縮減器。

儘管我的回答是基於我對hadoop的經驗,但我認爲這種思路可能會讓你在mongodb環境下工作。