Mysql
 sql >> Database >  >> RDS >> Mysql

È possibile leggere i dati MongoDB, elaborarli con Hadoop ed emetterli in un RDBS (MySQL)?

Diverse cose da notare:

  1. Non è possibile esportare dati da MongoDB a Hadoop utilizzando Sqoop. Questo perché Sqoop utilizza JDBC che fornisce un'API a livello di chiamata per database basato su SQL , ma MongoDB non è un database basato su SQL . Puoi guardare il «MongoDB Connector for Hadoop» per fare questo lavoro. Il connettore è disponibile su GitHub . (Modifica:come sottolinei nel tuo aggiornamento.)

  2. Per impostazione predefinita, le esportazioni di Sqoop non vengono eseguite in una singola transazione. Invece, secondo i Sqoop docs :

  3. Il «MongoDB Connector for Hadoop» non sembra forzare il flusso di lavoro che descrivi. Secondo i documenti:

  4. In effetti, per quanto ho capito dal «MongoDB Connector for Hadoop»:esempi , sarebbe possibile specificare un org.apache.hadoop.mapred.lib.db.DBOutputFormat nel tuo lavoro Hadoop MapReduce per scrivere l'output in un database MySQL. Seguendo l'esempio dal repository del connettore:

    job.setMapperClass( TokenizerMapper.class );
    job.setCombinerClass( IntSumReducer.class );
    job.setReducerClass( IntSumReducer.class );
    job.setOutputKeyClass( Text.class );
    job.setOutputValueClass( IntWritable.class );
    job.setInputFormatClass( MongoInputFormat.class );
    /* Instead of:
     * job.setOutputFormatClass( MongoOutputFormat.class );
     * we use an OutputFormatClass that writes the job results 
     * to a MySQL database. Beware that the following OutputFormat 
     * will only write the *key* to the database, but the principle
     * remains the same for all output formatters
     */
    job.setOutputFormatClass( DBOutputFormat.class );