sql >> Base de Datos >  >> RDS >> Mysql

¿Es posible leer datos de MongoDB, procesarlos con Hadoop y enviarlos a un RDBS (MySQL)?

Varias cosas a tener en cuenta:

  1. No es posible exportar datos de MongoDB a Hadoop usando Sqoop. Esto se debe a que Sqoop usa JDBC que proporciona una API de nivel de llamada para base de datos basada en SQL , pero MongoDB no es una base de datos basada en SQL . Puede consultar el «MongoDB Connector for Hadoop» para hacer este trabajo. El conector está disponible en GitHub . (Editar:como señalas en tu actualización).

  2. Las exportaciones de Sqoop no se realizan en una sola transacción por defecto. En cambio, según los documentos de Sqoop :

  3. El «Conector MongoDB para Hadoop» no parece forzar el flujo de trabajo que describe. Según los documentos:

  4. De hecho, según tengo entendido del «MongoDB Connector for Hadoop»:ejemplos , sería posible especificar un org.apache.hadoop.mapred.lib.db.DBOutputFormat en su trabajo Hadoop MapReduce para escribir el resultado en una base de datos MySQL. Siguiendo el ejemplo del repositorio del conector:

    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 );