hadoop - 来自内存的对象作为 Hadoop/MapReduce 的输入?

标签 hadoop mapreduce

我正在研究一种算法的并行化,它大致执行以下操作:

  • 阅读多个文本文档,总共 10k 个单词。
  • 为文本语料库中的每个单词创建一个对象。
  • 在所有单词对象之间创建一对(是的,O(n))。并返回最频繁的对。

  • 我想通过在第一台机器上的前 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/

    相关文章:

    hadoop - 如何解决 talend open studio for Big data 中的 tHDFS 组件问题

    java - hbase与java客户端的连接

    json - 将Json数据拆分为array <string>列

    hadoop - 如何安装hadoop?我可以用它模拟多台电脑吗?

    Hadoop 仅使用主节点处理数据

    java - 找不到 Hadoop 映射器类

    hadoop - Map-Reduce 没有像预期的那样减少复杂的键和值

    hadoop - 在cygwin上运行bin/hadoop jobtracker时缺少hadoop文件

    通过 Oozie 的 Shell 脚本

    eclipse - 当hadoop不在同一主机中时,从Eclipse执行MapReduce时出错