我能够成功查看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连接 通过防火墙。"。
我现在的问题是:
答案 0 :(得分:0)
原因似乎是用于获取表列表的IP地址可能与用于获取实际数据的IP地址不同。
在hadoop集群中使用Sqoop并从主节点运行命令的设置中,list-tables之类的命令直接来自master。但是,在群集上执行常规数据拉取作业。
从这里解决方案很清楚:
要验证这是否是问题,您可以运行:
curl 10.1.1.208:1433
在主人身上你会得到类似的东西:
curl:(52)来自服务器的空回复
虽然在没有正确访问权限的计算机上,您将得到不同的响应。