java - Hadoop HDFS MapReduce 输出到 MongoDb

标签 java mongodb hadoop mapreduce hdfs

我想编写 Java 程序,它从 HDFS 读取输入,使用 MapReduce 处理它并将输出写入 MongoDb。

场景如下:

  1. 我有一个包含 3 个数据节点的 Hadoop 集群。
  2. Java 程序从 HDFS 读取输入,并使用 MapReduce 对其进行处理。
  3. 最后将结果写入MongoDb。

其实从HDFS读取数据,用MapReduce处理很简单。但是我对将结果写入 MongoDb 感到困惑。是否支持任何 Java API 将结果写入 MongoDB?另外一个问题是,由于是Hadoop Cluster,所以我们不知道哪个datanode会运行Reducer任务并产生结果,是否可以将结果写到安装在特定服务器上的MongoDb中?

如果我想把结果写入HDFS,代码会是这样的:

@Override
public void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException 
{
    long sum = 0;
    for (LongWritable value : values) 
    {
        sum += value.get();
    }

    context.write(new Text(key), new LongWritable(sum));
}

现在我想将结果写入 MongoDb 而不是 HDFS,我该怎么做?

最佳答案

你想要«MongoDB Connector for Hadoop» . examples .

很容易在 Reducer 中添加代码,作为副作用,会将数据插入数据库。避免这种诱惑。使用连接器而不是仅仅插入数据作为 reducer 类的副作用的一个原因是推测执行:Hadoop 有时可以并行运行两个完全相同的 reduce 任务,这可能导致无关的插入和重复数据。

关于java - Hadoop HDFS MapReduce 输出到 MongoDb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19499447/

相关文章:

java - 安卓 : Switching and update layout

java - 使用简单的 spring memcached 进行 JSON 序列化

django - 使用 django 1.9 执行 syncdb 时出现 “settings.DATABASES is improperly configured” 错误

hadoop - 如何修复 "File could only be replicated to 0 nodes instead of minReplication (=1)."?

hadoop - Nifi流中的ClassNotFoundException

hadoop - 释放空间 Cloudera-QuickStart VM- Centos

java - 是否可以通过编程方式创建 Freemarker 宏?

java - 在 Android 中管理多个 EditText

node.js - 在 Meteor 1.7.0.4 中升级 MongoDB 驱动程序

mongodb - 如何将多个条件传递给 Criteria.elemMatch() Api?