我有一个关于Apache Sqoop的独特查询。我已经使用apache Sqoop导入工具将数据导入我的HDFS文件。
接下来,。我需要使用Hadoop(Sqoop)将数据放回另一个数据库(基本上我是从一个数据库供应商到另一个数据库供应商进行数据传输)。
要将数据放入Sql Server,有2个选项。
1)使用Sqoop Export工具连接到我的RDBMS(SQL服务器)并直接导出数据。
2)使用copyToLocal命令将HDFS数据文件(CSV格式)复制到本地计算机,然后对这些CSV文件执行BCP(或批量插入查询),将数据放入SQL Server数据库。
我想了解哪种方法是完美的(或者说是正确的)方法,哪一个方法更加快速 - 从HDFS到RDBMS的批量插入或Apache Sqoop导出。 ??
除了上面提到的这两种方式之外还有其他方法可以更快地从一个数据库供应商转移到另一个数据库供应商。?
我正在使用6-7个映射器(要传输的记录大约为20-25百万)
如果我的问题不清楚,请建议并告知我。
先谢谢。
答案 0 :(得分:2)
如果您所做的只是从一个供应商到另一个供应商的ETL,那么通过Sqoop / HDFS是一个糟糕的选择。如果数据源自HDFS或者意图保留在HDFS中,则Sqoop非常有意义。我还会考虑sqoop,如果该集合如此之大,以至于需要为转换阶段保留一个大型集群。但仅有2500万条记录是不值得的。
使用SQL Server导入时,在大型导入时,必须实现minimally logging,这需要批量插入。尽管25 mil并不大到使批量选项变得必不可少,但AFAIK sqoop和sqoop2仍然不支持SQL Server的批量插入。
我推荐SSIS。比sqoop更成熟,它有bulk insert task并且有rich transformation featureset。您的小额导入完全符合SSIS可以处理的大小。