0

我需要从 MYSQL 导入数据,运行 MR 并将其导出回 MYSQL。我可以使用 DBInputFormat 和 DBOutputFormat 在单个 MR 作业中成功完成一些记录。当我将输入记录扩展到 100+ 百万条记录时,MR 作业挂起。替代方法是将数据导出到 HDFS,运行 MR 作业并推回 My SQL。

对于大约 400+ 百万条记录的庞大数据集,哪个选项更好,使用 DBInputFormat 和 DBOutputFormat 或使用 HDFS 作为数据源和目标。

使用 HDFS 在我的 MR 工作之前和之后增加了一个步骤。由于数据存储在 HDFS 上,它将被复制(默认 3),并且需要更多的硬盘空间。谢谢鲁佩什

4

1 回答 1

3

我认为最好的方法应该是使用 SQOOP 来处理这种情况。Apache Sqoop 是一种工具,旨在有效地在 Apache Hadoop 和结构化数据存储(如 MySQL 或 Oracle 等关系数据库)之间传输批量数据。Sqoop 自动化了这个过程的大部分,依靠数据库来描述要导入的数据的模式。Sqoop 使用 MapReduce 导入和导出数据,提供并行操作和容错。请查看此链接并探索 Sqoop 以获取详细信息。SQOOP 详细信息

为了使用 DBInputFormat,您需要编写一个类,将数据库记录中的列反序列化为要使用的单个数据字段。这是相当乏味的——而且完全是算法。Sqoop 自动生成类定义以反序列化数据库中的数据。这些类也可用于以 Hadoop 的 SequenceFile 格式存储结果,这也允许您利用 HDFS 中的内置压缩。这些类被写成 .java 文件,您可以稍后将其合并到您自己的数据处理管道中。类定义是通过利用 JDBC 读取有关数据库和表的元数据的能力创建的。

调用 Sqoop 时,它会检索表的元数据,写出您要导入的列的类定义,并启动 MapReduce 作业以正确导入表体。

于 2013-07-29T11:56:35.327 回答