gpt4 book ai didi

mysql - 是否可以读取 MongoDB 数据,使用 Hadoop 对其进行处理,并将其输出到 RDBS (MySQL) 中?

转载 作者:IT老高 更新时间:2023-10-28 13:21:03 27 4
gpt4 key购买 nike

Summary:

Is it possible to:

  1. Import data into Hadoop with the «MongoDB Connector for Hadoop».
  2. Process it with Hadoop MapReduce.
  3. Export it with Sqoop in a single transaction.

我正在使用 MongoDB 构建一个 Web 应用程序。虽然 MongoDB 可以很好地完成大部分工作,但在某些部分我需要更强大的事务保证,为此我使用 MySQL 数据库。

我的问题是我想读取一个大的 MongoDB 集合进行数据分析,但是集合的大小意味着分析工作需要很长时间来处理。不幸的是,MongoDB 的内置 map-reduce 框架不能很好地完成这项工作,所以我更愿意使用 Apache Hadoop 进行分析。 .

我了解可以使用 «MongoDB Connector for Hadoop» 将数据从 MongoDB 读取到 Hadoop 中。 ,它从 MongoDB 读取数据,在 Hadoop 中使用 MapReduce 对其进行处理,最后将结果输出回 MongoDB 数据库。

问题是我希望 MapReduce 的输出进入 MySQL 数据库,而不是 MongoDB,因为结果必须与其他 MySQL 表合并。

为此,我知道 Sqoop 可以将 Hadoop MapReduce 的结果导出到 MySQL。

最后,我也想读取 MongoDB 数据,然后用 Hadoop 处理它,最后将结果输出到 MySQL 数据库中。

这可能吗?有哪些工具可以做到这一点?

最佳答案

TL;DR: Set an an output formatter that writes to a RDBS in your Hadoop job:

 job.setOutputFormatClass( DBOutputFormat.class );

注意几点:

  1. 无法使用 Sqoop 将数据从 MongoDB 导出到 Hadoop。这是因为 Sqoop 使用 JDBC它为基于 SQL 的数据库提供调用级 API,但 MongoDB 不是基于 SQL 的数据库。你可以看看«MongoDB Connector for Hadoop»做这项工作。连接器可用on GitHub . (编辑:正如您在更新中指出的那样。)

  2. 默认情况下,Sqoop 导出不会在单个事务中进行。相反,根据 Sqoop docs :

    Since Sqoop breaks down export process into multiple transactions, it is possible that a failed export job may result in partial data being committed to the database. This can further lead to subsequent jobs failing due to insert collisions in some cases, or lead to duplicated data in others. You can overcome this problem by specifying a staging table via the --staging-table option which acts as an auxiliary table that is used to stage exported data. The staged data is finally moved to the destination table in a single transaction.

  3. «MongoDB 的 Hadoop 连接器»似乎并没有强制执行您描述的工作流。根据文档:

    This connectivity takes the form of allowing both reading MongoDB data into Hadoop (for use in MapReduce jobs as well as other components of the Hadoop ecosystem), as well as writing the results of Hadoop jobs out to MongoDB.

  4. 确实,据我了解,«MongoDB Connector for Hadoop»: examples , 可以指定 org.apache.hadoop.mapred.lib.db.DBOutputFormat到您的 Hadoop 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 );

关于mysql - 是否可以读取 MongoDB 数据,使用 Hadoop 对其进行处理,并将其输出到 RDBS (MySQL) 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9965427/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com