Sqoop 可以列出表但不能导入数据

Posted

技术标签:

【中文标题】Sqoop 可以列出表但不能导入数据【英文标题】:Sqoop can list tables but not import data 【发布时间】:2016-03-04 14:58:07 【问题描述】:

我能够成功查看 SQL 服务器上的数据库或表的列表,例如:

sqoop list-tables  --connect 'jdbc:sqlserver://10.11.12.13; database=myDBname; username=jaheruddin; password=myPW' 

但是,当我尝试获取 1 行数据时,会发生错误。 sqoop 命令在另一台服务器上工作正常,所以这似乎不是问题,但为了说明,它看起来像这样:

sqoop import --m 1  --connect 'jdbc:sqlserver:10.11.12.13; database=myDB; username=jaheruddin; password=myPW' --query "SELECT top 1 *  FROM dbo.myTable WHERE  \$CONDITIONS" --target-dir 'sqoop_test'

我收到的错误信息是:

错误:java.lang.RuntimeException:java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException:TCP/IP 连接 到主机 10.11.12.13,端口 1433 失败。错误:“连接定时 出去。验证连接属性。确保一个实例 SQL Server 正在主机上运行并接受 TCP/IP 连接 港口。确保与端口的 TCP 连接未被阻止 通过防火墙。”。

我现在的问题是:

为什么我会在端口收到有关 TCP/IP 的警告,而我却能够成功获取表列表?

【问题讨论】:

【参考方案1】:

原因似乎是用于获取表列表的 IP 地址可能与用于获取实际数据的 IP 地址不同。

在您在 hadoop 集群上使用 Sqoop 并从主节点运行命令的设置中,列表表等命令直接来自主节点。但是,常规的数据拉取作业是在集群上执行的。

从这里解决方案很清楚:

确保集群中的所有机器都可以访问 sql server

要验证这是问题所在,您可以运行:

curl 10.1.1.208:1433

在master上你会得到类似的东西:

curl: (52) 来自服务器的空回复

在没有适当访问权限的机器上,您会得到不同的响应。

【讨论】:

以上是关于Sqoop 可以列出表但不能导入数据的主要内容,如果未能解决你的问题,请参考以下文章

利用sqoop将hive数据导入导出数据到mysql

sqoop导入增量数据

大数据高级开发工程师——大数据相关工具之一 Sqoop

利用sqoop完成数据导入导出

安装 sqoop

sqoop mysql数据变化怎么导入