gpt4 book ai didi

mongodb - 使用 Apache Sqoop 将数据从 Mongo/Cassandra 导出到 HDFS

转载 作者:可可西里 更新时间:2023-11-01 10:04:08 25 4
gpt4 key购买 nike

我有一个问题,我必须通过 Hive 从多个数据源读取数据,即 RDBMS(MYSQL、Oracle)和 NOSQL(MongoDb、Cassandra)到 HDFS。(增量)

Apache Sqoop 完美适用于 RDBMS 但不适用于 NOSQL,至少我无法成功使用它,(我尝试使用 Mongo 的 JDBC 驱动程序......它能够连接到 Mongo 但无法推送到 HDFS)

如果有人做过与此相关的工作并可以分享,那将非常有帮助

最佳答案

我使用了一个来自网络的示例,并且能够将文件从 Mongo 传输到 HDFS,反之亦然。我现在无法收集到确切的网页。但该程序如下所示。

你可以从中得到灵感并继续前进。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.bson.BSONObject;
import org.bson.types.ObjectId;

import com.mongodb.hadoop.MongoInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

import com.mongodb.hadoop.util.MongoConfigUtil;

public class CopyFromMongodbToHDFS {

public static class ImportWeblogsFromMongo extends
Mapper<LongWritable, Text, Text, Text> {

public void map(Object key, BSONObject value, Context context)
throws IOException, InterruptedException {

System.out.println("Key: " + key);
System.out.println("Value: " + value);
String md5 = value.get("md5").toString();
String url = value.get("url").toString();
String date = value.get("date").toString();
String time = value.get("time").toString();
String ip = value.get("ip").toString();
String output = "\t" + url + "\t" + date + "\t" + time + "\t" + ip;
context.write(new Text(md5), new Text(output));

}

}

public static void main(String[] args) throws IOException,
InterruptedException, ClassNotFoundException {

Configuration conf = new Configuration();
MongoConfigUtil.setInputURI(conf,
"mongodb://127.0.0.1:27017/test.mylogs");

System.out.println("Configuration: " + conf);

@SuppressWarnings("deprecation")
Job job = new Job(conf, "Mongo Import");

Path out = new Path("/user/cloudera/test1/logs.txt");

FileOutputFormat.setOutputPath(job, out);

job.setJarByClass(CopyFromMongodbToHDFS.class);
job.setMapperClass(ImportWeblogsFromMongo.class);

job.setOutputKeyClass(ObjectId.class);
job.setOutputValueClass(BSONObject.class);

job.setInputFormatClass(MongoInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);

job.setNumReduceTasks(0);
System.exit(job.waitForCompletion(true) ? 0 : 1);

}

}

关于mongodb - 使用 Apache Sqoop 将数据从 Mongo/Cassandra 导出到 HDFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25465899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com