Mysql
 sql >> Base de données >  >> RDS >> Mysql

Est-il possible de lire les données MongoDB, de les traiter avec Hadoop et de les sortir dans un RDBS (MySQL) ?

Plusieurs choses à noter :

  1. L'exportation de données de MongoDB vers Hadoop à l'aide de Sqoop n'est pas possible. En effet, Sqoop utilise JDBC qui fournit une API au niveau de l'appel pour la base de données basée sur SQL , mais MongoDB n'est pas une base de données basée sur SQL . Vous pouvez consulter le «MongoDB Connector for Hadoop» pour faire ce travail. Le connecteur est disponible sur GitHub . (Edit :comme vous le signalez dans votre mise à jour.)

  2. Les exports Sqoop ne se font pas en une seule transaction par défaut. Au lieu de cela, selon les Documents Sqoop :

  3. Le «MongoDB Connector for Hadoop» ne semble pas forcer le workflow que vous décrivez. D'après la documentation :

  4. En effet, d'après ce que j'ai compris du «MongoDB Connector for Hadoop» :exemples , il serait possible de spécifier un org.apache.hadoop.mapred.lib.db.DBOutputFormat dans votre travail Hadoop MapReduce pour écrire la sortie dans une base de données MySQL. En suivant l'exemple du référentiel de connecteur :

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