Hadoop MapReduce DBInputFormat和DBOutputFormat

时间:2013-07-26 07:37:05

标签: hadoop mapreduce hdfs

我需要从MYSQL导入数据,运行MR并将其导出回MYSQL。 我能够使用DBInputFormat和DBOutputFormat在单个MR作业中成功完成一些记录。 当我将输入记录缩放到1亿多条记录时,MR作业会挂起。 替代方法是将数据导出到HDFS,运行MR作业并推回到My SQL。

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

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

1 个答案:

答案 0 :(得分:3)

我认为最好的方法应该是使用SQOOP来处理这种情况.Apache Sqoop是一种工具,用于在Apache Hadoop和结构化数据存储(如MySQL或Oracle等关系数据库)之间高效传输批量数据.Sqoop自动化最多在此过程中,依靠数据库来描述要导入的数据的模式。 Sqoop使用MapReduce导入和导出数据,提供并行操作和容错。请查看此链接并探索Sqoop的detials。 SQOOP details

为了使用DBInputFormat,您需要编写一个类,该类将数据库记录中的列反序列化为可以使用的各个数据字段。这非常繁琐 - 完全算法。 Sqoop自动生成类定义以反序列化数据库中的数据。这些类还可用于将结果存储在Hadoop的SequenceFile格式中,这样您也可以利用HDFS中的内置压缩。这些类被编写为.java文件,您可以在以后将这些文件合并到您自己的数据处理管道中。通过利用JDBC读取有关数据库和表的元数据的能力来创建类定义。

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