在 Hadoop 中使用 DBOutputFormat

Posted

技术标签:

【中文标题】在 Hadoop 中使用 DBOutputFormat【英文标题】:Using DBOutputFormat in Hadoop 【发布时间】:2012-09-18 06:43:03 【问题描述】:

当使用 DBOutputFormat 和 hadoop 时,说最终的结果是转到 mysql 数据库。每次必须写入结果时,Hadoop 会创建单独的连接吗? (DB 是否会被打开的连接过多所累)。我没有使用这种格式,所以任何关于相同的建议都是可以接受的。它会比 Sqoop 有优势吗? Sqoop 也可用于将输出文件导出到数据库。请分享您的观点。

【问题讨论】:

【参考方案1】:

这是我从 Cloudera 找到的 this 博客文章的解释:

DBOutputFormat 通过生成一组 每个 reducer 中的 INSERT 语句。然后是 reducer 的 close() 方法 在批量事务中执行它们。执行大量 这些来自几个reduce任务的并发可能会淹没数据库。如果 你想导出大量数据,你可能会更好 将 INSERT 语句生成到文本文件中,然后使用 数据库提供的批量数据导入工具做数据库 导入。

所以看起来每个reducer只会打开一个连接,所以数据库可能不会有太多打开的连接,但它仍然可能导致性能问题。我不确定,但 Sqoop 可能更高效、更健壮。

【讨论】:

Sqoop2 在孵化器中。觉得它很有帮助。

以上是关于在 Hadoop 中使用 DBOutputFormat的主要内容,如果未能解决你的问题,请参考以下文章

在 Spark 中使用 Hadoop 作业

在 ubuntu 中使用 deb intall 文件安装 hadoop 1.0.1 后如何指定 HADOOP_HOME

如何在分区器 hadoop 中使用分布式缓存?

是否可以在 Hadoop 1 中使用 Impala(没有 YARN)?

关于如何在 Windows 中使用 hadoop 安装水槽的任何想法?

如何在多个 hadoop 集群中使用一个节点作为数据节点