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 可以列出表但不能导入数据的主要内容,如果未能解决你的问题,请参考以下文章