我正在研究一种算法的并行化,它大致执行以下操作:
我想通过在第一台机器上的前 1000 个单词对象之间创建对,在下一台机器上创建第二个 1000 个单词对象等之间的对,从而并行化 3. 步骤。
我的问题是如何将 2. 步骤中创建的对象传递给 Mapper?据我所知,我需要为此输入文件,因此需要序列化对象(尽管之前没有使用过)。有没有直接的方法将对象传递给映射器?
在此先感谢您的帮助
叶夫根尼
更新
感谢您之前阅读我的问题。序列化似乎是解决这个问题的最好方法(参见 java.io.Serializable)。此外,我发现本教程对于将序列化对象中的数据读取到 hadoop 中很有用:http://www.cs.brown.edu/~pavlo/hadoop/ )。
最佳答案
如何并行化所有步骤?使用您的 #1 文本文档作为 Mapper 的输入。为 Mapper 中的每个单词创建对象。在 Mapper 中,您的键值对将是单词-对象对(或对象-单词,具体取决于您在做什么)。然后,Reducer 可以计算唯一对。
Hadoop 将负责将所有相同的键集中到同一个 Reducer 中。
关于hadoop - 来自内存的对象作为 Hadoop/MapReduce 的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4940986/