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

时间:2016-03-04 14:58:07

标签: sql-server jdbc sqoop

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

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

但是,当我尝试获取一行数据时,会发生错误。 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 个答案:

答案 0 :(得分:0)

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

在hadoop集群中使用Sqoop并从主节点运行命令的设置中,list-tables之类的命令直接来自master。但是,在群集上执行常规数据拉取作业。

从这里解决方案很清楚:

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

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

curl 10.1.1.208:1433

在主人身上你会得到类似的东西:

  

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

虽然在没有正确访问权限的计算机上,您将得到不同的响应。