Sqoop 导出到 Sql Server VS 批量插入到 SQL Server

Posted

技术标签:

【中文标题】Sqoop 导出到 Sql Server VS 批量插入到 SQL Server【英文标题】:Sqoop Export into Sql Server VS Bulk Insert into SQL server 【发布时间】:2014-06-14 06:43:40 【问题描述】:

我有一个关于 Apache Sqoop 的独特查询。我已经使用 apache Sqoop 导入工具将数据导入到我的 HDFS 文件中。

接下来,。我需要使用 Hadoop (Sqoop) 将数据放回另一个数据库(基本上我正在执行从一个数据库供应商到另一个数据库供应商的数据传输)。

要将数据放入 Sql Server ,有 2 个选项。

1) 使用 Sqoop 导出工具连接到我的 RDBMS(SQL 服务器)并直接导出数据。

2) 使用 copyToLocal 命令将 HDFS 数据文件(CSV 格式)复制到我的本地计算机,然后对这些 CSV 文件执行 BCP(或批量插入查询)以将数据放入 SQL 服务器数据库。

我想了解哪种方法是完美的(或更正确的)方法,其中哪一种方法更快 - 从 HDFS 到 RDBMS 的批量插入或 Apache Sqoop 导出。 ??

除了上面提到的这两种方式之外,还有其他方式可以更快地从一个数据库供应商转移到另一个供应商吗?

我正在使用 6-7 个映射器(要传输的记录约为 20-25 百万)

如果我的问题不清楚,请提出建议并告诉我。

提前致谢。

【问题讨论】:

【参考方案1】:

如果您所做的只是从一个供应商到另一个供应商的 ETL,那么通过 Sqoop/HDFS 是一个糟糕的选择。如果数据源自 HDFS 或打算保留在 HDFS 中,Sqoop 非常有意义。如果集合太大以至于需要为转换阶段提供一个大集群,我也会考虑使用 sqoop。但是仅仅 2500 万条记录是不值得的。

使用 SQL Server 导入,在大型导入中,必须实现 minimally logging,这需要批量插入。虽然 2500 万并没有大到必须使用批量选项,但 AFAIK sqoop 和 sqoop2 仍然不支持 SQL Server 的批量插入。

我推荐SSIS。比 sqoop 成熟得多,它有bulk insert task 和rich transformation featureset。您的小型导入完全在 SSIS 可以处理的大小范围内。

【讨论】:

谢谢 Remus,这回答了我的问题。非常感谢。 @Remus:如果不是为了从一个供应商到另一个供应商的 ETL,那么在 BCP 和 SQOOP 中哪个选项最好,以便从 hive/hdfs 导出到 sql server。

以上是关于Sqoop 导出到 Sql Server VS 批量插入到 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

在sql server中选择进入VS导入导出向导

sqoop 从oracle抽数据是 sql怎么写

如何解决 java.sql.SQLException:[SQL7008] database_name 中的 table_name 对操作无效,而 sqoop 从 hdfs 导出到 DB2

SQL Server 2008转换成sql 2000数据库如何操作?

使用Sqoop把ADS层数据导出到MySQL

使用 sqoop 从 sql server 导入表时出错