我想编写 Java 程序,它从 HDFS 读取输入,使用 MapReduce 处理它并将输出写入 MongoDb。
场景如下:
- 我有一个包含 3 个数据节点的 Hadoop 集群。
- Java 程序从 HDFS 读取输入,并使用 MapReduce 对其进行处理。
- 最后将结果写入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/