Hadoop MapReduce DBInputFormat和DBOutputFormat
我需要从MYSQL导入数据,运行MR并将其导出回MYSQL。 我能够在单个MR作业中使用DBInputFormat和DBOutputFormat成功完成一些记录。 当我将输入记录缩放到1亿多条记录时,MR作业挂起。 对此的替代是将数据导出到HDFS,运行MR作业并推送回My SQL。Hadoop MapReduce DBInputFormat和DBOutputFormat
对于大约400多万条记录的大数据集,使用DBInputFormat和DBOutputFormat或使用HDFS作为数据源和目的地,哪个选项更好。
使用HDFS会在我的MR作业之前和之后添加一个步骤。 由于数据存储在HDFS上,因此会被复制(默认为3),并且需要更多的硬盘空间。 感谢 Rupesh
我认为最好的办法应在处理这类situation.Apache Sqoop使用SQOOP是专为高效传输的Apache Hadoop和结构化的数据存储之间的批量数据如关系数据库如像MySQL或工具Oracle.Sqoop可以自动执行大部分此过程,依靠数据库来描述要导入的数据的模式。 Sqoop使用MapReduce导入和导出数据,提供并行操作和容错功能。请查看此链接并探索Sqoop的detials。 SQOOP details
为了使用DBInputFormat,您需要编写一个类,将数据库记录中的列反序列化为单独的数据字段以便使用。这非常乏味 - 而且完全是算法的。 Sqoop自动生成类定义以反序列化来自数据库的数据。这些类还可以用于将结果存储在Hadoop的SequenceFile格式中,这使您可以利用HDFS中的内置压缩功能。这些类被写为.java文件,您可以稍后将它们合并到您自己的数据处理管道中。类定义是通过利用JDBC读取关于数据库和表的元数据的能力来创建的。
当调用Sqoop时,它将检索表的元数据,为要导入的列写出类定义,并启动MapReduce作业以导入表格本体。
Sqoop是一个选项,我试图评估哪个会更高效DBINputFormat&DBOutputFormat或Sqoop –
检查我的答案已更新,以回答您的问题 – Binary01
我已经为我的类实现了DBWritable,并重写了readFields()和write()方法。我觉得Sqoop使用的代码的性能比我执行的更好。请分享你的想法。 –
你能解释为什么MR作业挂起? – zsxwing
你的意思是说我们不使用DBinputFormat将数据导出到HDFS? –
我们正在使用DBINputFormat并对其执行MR操作。我假设DBInputFormat将在内部存储HDFS数据。 –