- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要从 MYSQL 导入数据,运行 MR 并将其导出回 MYSQL。我能够使用 DBInputFormat 和 DBOutputFormat 在单个 MR 作业中成功完成一些记录。当我将输入记录扩展到 100+ 百万条记录时,MR 作业挂起。替代方法是将数据导出到 HDFS ,运行 MR 作业并推送回 My SQL。
对于包含大约 4 亿条记录的庞大数据集,使用 DBInputFormat 和 DBOutputFormat 还是使用 HDFS 作为数据源和目标,哪个选项更好。
使用 HDFS 在我的 MR 作业前后增加了一个步骤。由于数据存储在 HDFS 上,因此它会被复制(默认 3)并且需要更多的硬盘空间。谢谢鲁佩什
最佳答案
我认为最好的方法应该是使用 SQOOP 来处理这种情况。Apache Sqoop 是一种工具,用于在 Apache Hadoop 和结构化数据存储(例如关系数据库,如 MySQL 或 Oracle)之间高效地传输大量数据。Sqoop 自动化了大多数在这个过程中,依赖于数据库来描述要导入的数据的模式。 Sqoop 使用 MapReduce 导入和导出数据,提供并行操作和容错能力。请查看此链接并探索 Sqoop 以获取详细信息。 SQOOP details
为了使用 DBInputFormat,您需要编写一个类,将数据库记录中的列反序列化为单独的数据字段以供使用。这非常乏味——而且完全是算法。 Sqoop 自动生成类定义来反序列化数据库中的数据。这些类也可用于以 Hadoop 的 SequenceFile 格式存储结果,这也允许您利用 HDFS 中的内置压缩。这些类被写成 .java 文件,您可以稍后将其合并到您自己的数据处理管道中。类定义是利用 JDBC 读取有关数据库和表的元数据的能力创建的。
当调用 Sqoop 时,它会检索表的元数据,写出要导入的列的类定义,并启动 MapReduce 作业以正确导入表体。
关于Hadoop MapReduce DBInputFormat 和 DBOutputFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17875572/
我需要从 MYSQL 导入数据,运行 MR 并将其导出回 MYSQL。我能够使用 DBInputFormat 和 DBOutputFormat 在单个 MR 作业中成功完成一些记录。当我将输入记录扩展
在hadoop中使用DBOutputFormat时,说最后的结果是去MySql数据库。每次必须写入结果时,Hadoop 是否会创建单独的连接? (DB 是否会承受太多打开的连接)。我没有使用过这种格式
我是一名优秀的程序员,十分优秀!