2010-11-21 92 views
2

我聽說過那些已經成功在谷歌Nexus上運行mapreduce的人。沒有關於在an​​droid上運行完整集羣映射的更多信息。在便攜式設備上運行mapreduce

我真的很想在我的手機上以相對少量的非數據集羣模式運行mapreduce,完全可以使用hadoop嗎?有沒有可以在任何地方使用的剝離版本?任何替代品?

回答

6

使用諸如map reduce之類的過程的整個目的是將工作負載分散到多臺計算機上,同時實現當前計算機上不可能實現的併發。如果你沒有任何聯合多個Android設備的計劃,那麼幾乎不需要使用像hadoop這樣的東西。

如果你可以加載設備上的所有數據(這就是你說的你可以做的)。並行運行算法最接近的是使用多個線程並拆分數據設置。您不必進行縮減樣式編程以獲得並行編程的好處,並且將算法作爲生產者/消費者模型進行開發可能會更容易。但是,如果你只是想擁有它,那麼這是一種方法。

我會從兩個BlockingQueues(入隊隊列和出隊隊列)和一個線程開始讀取文件(即Producer)中的數據。創建一個線程池以從隊列中讀取並寫入出隊列。每個線程將對其中一個輸入(即Consumer)進行計算,並將結果發佈到隊列中,以便生產者可以接收結果。在隊列內和隊列外進行一次將執行一半的map-reduce過程。這通常被稱爲生產者/消費者。你可以用這種風格的建築做很多事情。

如果你想做一個完整的地圖減少重複的過程,所以你的減少步驟並行運行。生產者將按鍵收集地圖中的所有結果,並將這些結果反饋給隊列中的隊列。每個消費者現在將執行減少步驟,並將其結果發回到出隊隊列中,在那裏生產者將執行最終排序並將結果呈現給用戶界面。

因此,對於生產者滿狀態轉變爲:

  1. 解析輸入文件,並創建工作負荷下降到在隊列中。
  2. 從隊列中讀取結果,直到完成所有地圖處理。
  3. 按鍵結合結果。
  4. 將所有結果與作爲一個工作單元的相同密鑰寫入隊列中。重複所有收到的唯一密鑰。
  5. 閱讀所有出來的結果。

消費者狀態轉換將是:

  1. 讀取工作單位在隊列中。
  2. 在該工作單元上執行映射邏輯。
  3. 將結果+鍵寫入出隊隊列。
  4. 從隊列中讀取工作單元。
  5. 對該工作單元執行減少邏輯。
  6. 將結果寫入出隊列。

中提琴地圖減少風格框架在Android上。