pag*_*tti 7 mysql hadoop mongodb sqoop
摘要:
是否有可能:
- 使用«MongoDB Connector for Hadoop»将数据导入Hadoop.
- 使用Hadoop MapReduce处理它.
- 在单个事务中使用Sqoop导出它.
我正在使用MongoDB构建一个Web应用程序.虽然MongoDB适用于大多数工作,但在某些部分我需要更强的事务保证,我使用MySQL数据库.
我的问题是我想读取一个用于数据分析的大型MongoDB集合,但是集合的大小意味着分析工作需要很长时间才能处理.不幸的是,MongoDB的内置map-reduce框架不适合这项工作,所以我更愿意用Apache Hadoop进行分析.
我知道可以通过使用«MongoDB Connector for Hadoop»从MongoDB中读取数据,它从MongoDB读取数据,在Hadoop中使用MapReduce处理它,最后将结果输出回MongoDB数据库.
问题是我希望MapReduce的输出进入MySQL数据库而不是MongoDB,因为结果必须与其他MySQL表合并.
为此,我知道Sqoop可以将Hadoop MapReduce的结果导出到MySQL中.
最后,我想读取MongoDB数据,然后用Hadoop处理它,最后将结果输出到MySQL数据库中.
这可能吗?有哪些工具可以做到这一点?
bri*_*ice 10
TL; DR:设置一个输出格式化程序,写入Hadoop作业中的RDBS:
Run Code Online (Sandbox Code Playgroud)job.setOutputFormatClass( DBOutputFormat.class );
有几点需要注意:
使用Sqoop将数据从MongoDB导出到Hadoop是不可能的.这是因为Sqoop使用JDBC为基于SQL的数据库提供调用级API ,但MongoDB 不是基于SQL的数据库.您可以查看«MongoDB Connector for Hadoop»来完成这项工作.连接器在GitHub上可用.(编辑:正如您在更新中指出的那样.)
默认情况下,Sqoop导出不会在单个事务中进行.相反,根据Sqoop文档:
由于Sqoop将导出过程分解为多个事务,因此失败的导出作业可能会导致将部分数据提交到数据库.这可能进一步导致后续作业由于某些情况下的插入冲突而失败,或导致其他作业中的重复数据.您可以通过
--staging-table选项指定登台表来解决此问题,该选项充当用于暂存导出数据的辅助表.分阶段数据最终在单个事务中移动到目标表.
«MongoDB Connector for Hadoop»似乎并未强制您描述的工作流程.根据文件:
这种连接的形式允许将MongoDB数据读入Hadoop(用于MapReduce作业以及Hadoop生态系统的其他组件),以及将Hadoop作业的结果写入MongoDB.
实际上,据我所知,«MongoDB Connector for Hadoop»:示例,可以指定一个org.apache.hadoop.mapred.lib.db.DBOutputFormatHadoop MapReduce作业,将输出写入MySQL数据库.按照连接器存储库中的示例:
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 );
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
10431 次 |
| 最近记录: |