복붙노트

[HADOOP] Apache Sqoop을 사용하여 Mongo / Cassandra에서 HDFS로 데이터 내보내기

HADOOP

Apache Sqoop을 사용하여 Mongo / Cassandra에서 HDFS로 데이터 내보내기

여러 데이터 소스, 즉 RDBMS (MYSQL, Oracle) 및 NOSQL (MongoDb, Cassandra)에서 Hive를 통해 HDFS로 데이터를 읽어야하는 문제가 있습니다 (증분).

Apache Sqoop은 RDBMS에서 완벽하게 작동하지만 NOSQL에서는 작동하지 않습니다. 최소한 성공적으로 사용할 수 없었습니다 (Mongo에 JDBC 드라이버를 사용하려고했습니다 ... Mongo에 연결할 수는 있었지만 푸시 할 수 없었습니다 HDFS로)

누구든지 이와 관련된 작업을 수행하고 공유 할 수 있다면 정말 도움이 될 것입니다.

해결법

  1. ==============================

    1.웹에서 예제를 사용하여 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);
    
        }
    
    }
    
  2. ==============================

    2.mongoDB의 경우 HDFS로 내보낼 컬렉션의 mongodump를 만듭니다.

    mongoDB의 경우 HDFS로 내보낼 컬렉션의 mongodump를 만듭니다.

    덤프는 .bson 형식입니다 (예 : "file.bson"). .json 형식으로 변환합니다. file.bson은 기본적으로 지정된 의 "dump"폴더에 저장됩니다.

    "copyFromLocal"을 사용하여 파일을 HDFS로 복사하십시오.

  3. from https://stackoverflow.com/questions/25465899/exporting-data-from-mongo-cassandra-to-hdfs-using-apache-sqoop by cc-by-sa and MIT license