在hadoop中使用dboutputformat时,假设最终结果是转到mysql数据库。hadoop会在每次编写结果时创建单独的连接吗(数据库将承受太多的开放连接)。我没有使用这种格式,所以任何关于这种格式的建议都是可以接受的。它的性能会优于sqoop吗?sqoop还可以用于将输出文件导出到db。请分享你的观点。
ut6juiuv1#
以下是我从cloudera找到的这篇博文的解释:dboutputformat通过在每个reducer中生成一组insert语句来写入数据库。然后reducer的close()方法在批量事务中执行它们。同时执行多个reduce任务中的大量这些任务可能会淹没数据库。如果要导出大量数据,最好先将insert语句生成到文本文件中,然后使用数据库提供的批量数据导入工具进行数据库导入。因此,每个reducer似乎只打开一个连接,因此数据库可能不会有太多打开的连接,但仍然可能导致性能问题。我不确定,但sqoop可能更高效、更健壮。
1条答案
按热度按时间ut6juiuv1#
以下是我从cloudera找到的这篇博文的解释:
dboutputformat通过在每个reducer中生成一组insert语句来写入数据库。然后reducer的close()方法在批量事务中执行它们。同时执行多个reduce任务中的大量这些任务可能会淹没数据库。如果要导出大量数据,最好先将insert语句生成到文本文件中,然后使用数据库提供的批量数据导入工具进行数据库导入。
因此,每个reducer似乎只打开一个连接,因此数据库可能不会有太多打开的连接,但仍然可能导致性能问题。我不确定,但sqoop可能更高效、更健壮。