Diverse cose da notare:
-
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.)
-
Per impostazione predefinita, le esportazioni di Sqoop non vengono eseguite in una singola transazione. Invece, secondo i Sqoop docs :
-
Il «MongoDB Connector for Hadoop» non sembra forzare il flusso di lavoro che descrivi. Secondo i documenti:
-
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 );