使用sqoop导入sql server数据库

问题描述:

以前都只是使用sqoop导入mysql和oracle数据库的数据,今天突然来了一个sql server数据库,发现按照以前的写法不对,所以开始了我的百度之路。。。

首先,我按照这个大兄弟说的,去下载了sql server的驱动,
但是,在下载SQL Server Hadoop Connector的时候,我突然发现:

使用sqoop导入sql server数据库_第1张图片

微软竟然不支持下载这个名字叫SQL Server Hadoop Connector的东西了,
然后我又百度了好久,发现除了csdn以外,竟然没有官方的下载地址。。。
没有办法,继续百度,找寻解决方案,突然,我看到了这个:

使用sqoop导入sql server数据库_第2张图片

原来sqoop1.4之后,就不需要那个东西了,
所以微软自然也就没有提供下载地址了。
于是我赶紧去看下我的sqoop版本:

sqoop的版本

刚刚好!所以我就不用去下载那个万恶的SQL Server Hadoop Connector了
接下来,就是按照他们所说的写导入语句了

语句一:
使用sqoop导入sql server数据库_第3张图片
语句二:
使用sqoop导入sql server数据库_第4张图片

这两个语句,乍一看好像是相同的,但是又有一些不同。
第二个语句没有--driver,也就是没有指定驱动名称
而且两个的jdbc连接也是不同,然后我又去百度了一下:

使用sqoop导入sql server数据库_第5张图片

原来因为sql server的版本不同,所以jdbc的写法也不同。。。
因为我这边是sql server2005,所以自然要这么写了:

sqoop import \
--driver com.microsoft.sqlserver.jdbc.SQLServerDriver \
--connect "jdbc:sqlserver://192.168.1.1; \
username=qxf; password=password;database=qxf" \
--table test --hive-table raw.test --hive-import

然后,又报错了:

报错截图

原来是因为忘了指定分隔符和任务大小,加上:

sqoop import \
--driver com.microsoft.sqlserver.jdbc.SQLServerDriver \
--connect "jdbc:sqlserver://192.168.1.1; \
username=qxf; password=password;database=qxf" \
--table test --hive-table raw.test --hive-import \
-m 1 --hive-overwrite --input-null-string '\\N' \
--input-null-non-string '\\N' \
--null-string '\\N' --null-non-string '\\N' \ 
--hive-drop-import-delims \
--fields-terminated-by '\0001'
结果:成功导入
中途还有一个小小的问题,
我们从网上下载的sql server的驱动一般有两个:

使用sqoop导入sql server数据库_第6张图片

这个是这么解释的,所以我们要根据数据库的版本去选择对应的驱动

还有一个小问题,在我导入的时候,出现过这个异常:
com.microsoft.sqlserver.jdbc.SQLServerException: 系统内存不足。
百度之后发现需要这么写:

使用sqoop导入sql server数据库_第7张图片

所以我的导入语句还需要再修改一下:

sqoop import \
--driver com.microsoft.sqlserver.jdbc.SQLServerDriver \
--connect "jdbc:sqlserver://192.168.1.1; \
username=qxf;password=password;database=qxf;selectMethod=cursor" \
--table test --hive-table raw.test --hive-import \
-m 1 --hive-overwrite --input-null-string '\\N' \
--input-null-non-string '\\N' \
--null-string '\\N' --null-non-string '\\N' \ 
--hive-drop-import-delims \
--fields-terminated-by '\0001'

你说为什么导入数据就这么复杂。。不喜欢sql server

你可能感兴趣的:(大数据)