2011-02-09 77 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