我正在研究并行化算法,该算法大致如下:
我想通过创建前1000个单词对象和第一台机器上的第二个1000个单词对象,以及下一台机器上的第二个1000个单词对象等来并行化3.步骤。
我的问题是如何将2.步骤中创建的对象传递给Mapper?据我所知,我需要输入文件,因此需要序列化对象(虽然之前没有使用过)。有没有直接的方法将对象传递给Mapper?
提前感谢您的帮助
叶夫根
更新 感谢您以前阅读我的问题。序列化似乎是解决此问题的最佳方法(请参阅java.io.Serializable)。此外,我发现本教程对于将序列化对象中的数据读入hadoop非常有用:http://www.cs.brown.edu/~pavlo/hadoop/)。
答案 0 :(得分:0)
如何并行化所有步骤?使用#1文本文档作为Mapper的输入。为Mapper中的每个单词创建对象。在Mapper中,您的键值对将是单词 - 对象对(或对象 - 单词取决于您正在做什么)。然后,Reducer可以计算唯一对。
Hadoop将把所有相同的密钥组合到同一个Reducer中。
答案 1 :(得分:0)
使用twitter protobufs(elephant-bird)。将每个单词转换为protobuf对象,然后根据需要对其进行处理。与默认的java序列化相比,protobufs也更快更轻。请参阅Kevin Weil的演讲。 http://www.slideshare.net/kevinweil/protocol-buffers-and-hadoop-at-twitter