2011-02-09 81 views
0

我工作的並行算法,大致具有以下功能:來自內存的對象作爲Hadoop/MapReduce的輸入?

  1. 閱讀一些文本文檔,共10K字。
  2. 爲文本語料庫中的每個單詞創建一個對象。
  3. 在所有單詞對象(是,O(n))之間創建一個對。並返回最頻繁的對。

我想通過創建之間的對並行化3步驟中的第一字1000的對象的拳頭機上的其餘部分,下一個機器上的第二1000字對象等

我的問題是如何將在第2步中創建的對象傳遞給Mapper?據我所知,我會需要這個輸入文件,因此需要序列化對象(雖然以前沒有用過)。有沒有直接的方法將對象傳遞給Mapper?

在此先感謝您的幫助

葉夫根

UPDATE 感謝您閱讀之前,我的問題。序列化似乎是解決此問題的最佳方法(請參閱java.io.Serializable)。此外,我發現這個教程很有用,可以將序列化對象中的數據讀入hadoop:http://www.cs.brown.edu/~pavlo/hadoop/)。

+0

不以任何方式在這方面的專家,但我不認爲有這方面的專家。序列化對象不是很難。 – Nick 2011-02-09 03:35:28

回答

0

如何平行化所有步驟?將您的#1文本文檔用作Mapper的輸入。爲Mapper中的每個單詞創建對象。在Mapper中,您的鍵值對將是單詞對象(或對象詞取決於您在做什麼)。然後Reducer可以計算唯一的對。

Hadoop將負責將所有相同的密鑰放在一起放入同一個Reducer中。

+0

感謝您的建議;該算法非常龐大,我打算首先從消耗資源最多的部分開始,看看我能否改善性能。 – evgeni 2011-02-09 04:35:21