Ubuntu16.04下从SQL Server2017连接Hadoop创建外部表时遇连接拒绝错误
解决SQL Server 2017向Hadoop创建外部表时的连接拒绝错误
我之前也碰到过一模一样的问题!先把你遇到的错误细节明确下来:
Msg 105019, Level 16, State 1, Line 1 EXTERNAL TABLE访问因内部错误失败:'调用HdfsBridge_IsDirExist时引发Java异常。Java异常信息:从DESKTOP-VE8KNAG/xxx.xxx.x.xxx到xxx.xxx.x.x:54310的调用因连接异常失败:java.net.ConnectException: Connection refused: no further information'
这个错误的核心是SQL Server无法和Hadoop集群的指定端口(54310)建立连接,下面是我亲测有效的排查和解决步骤:
1. 先确认Hadoop的目标端口是否正常监听
- 登录你的Hadoop集群节点,找到
hdfs-site.xml配置文件(通常在/etc/hadoop/conf或$HADOOP_HOME/etc/hadoop目录下),核对对应端口的配置项——比如如果是DataNode的IPC端口,对应配置是dfs.datanode.ipc.address,确认端口是否为54310。 - 在Hadoop节点上用命令检查端口监听状态:
如果没有输出,说明Hadoop服务没正确绑定这个端口,需要重启对应的服务(比如DataNode或NameNode)。netstat -tulpn | grep 54310
2. 测试Ubuntu服务器到Hadoop节点的网络连通性
- 在你的Ubuntu 16.04服务器上,用
nc或telnet测试端口连通性:
如果提示连接拒绝,说明网络层面有问题:# 用nc测试 nc -zv xxx.xxx.x.x 54310 # 或用telnet telnet xxx.xxx.x.x 54310- 检查Hadoop节点的防火墙规则,允许Ubuntu服务器IP访问54310端口。比如Hadoop节点是Ubuntu系统的话:
ufw allow from 你的Ubuntu服务器IP to any port 54310 ufw reload - 如果是云环境,还要检查云平台的安全组规则,确保54310端口对Ubuntu服务器IP开放。
- 检查Hadoop节点的防火墙规则,允许Ubuntu服务器IP访问54310端口。比如Hadoop节点是Ubuntu系统的话:
3. 核对SQL Server的外部表配置
- 确认创建外部表时的
LOCATION路径格式正确,应该是hdfs://xxx.xxx.x.x:端口号/目标路径,端口号要和Hadoop配置完全一致。 - 检查SQL Server的PolyBase配置(SQL Server连接Hadoop依赖PolyBase),把Hadoop集群的
core-site.xml和hdfs-site.xml复制到SQL Server的PolyBase配置目录(通常是/opt/mssql/lib/hadoop/conf,根据你的安装路径调整),确保配置同步。
4. 检查Hadoop服务状态
- 在Hadoop节点上用
jps命令查看核心服务是否正常运行:
如果看不到DataNode、NameNode这类进程,说明服务未启动,执行命令重启:jps
同时可以查看# 重启HDFS服务 stop-dfs.sh start-dfs.sh$HADOOP_HOME/logs下的日志文件(比如hadoop-*-datanode-*.log),排查服务启动失败的具体原因。
5. 检查Ubuntu服务器自身的防火墙限制
- 别忘了确认你的Ubuntu 16.04服务器是否允许出站访问54310端口:
如果有规则限制,添加出站允许:ufw statusufw allow out to xxx.xxx.x.x port 54310 ufw reload
我当时就是因为Hadoop节点的防火墙没开放54310端口才踩的坑,开放之后就顺利创建外部表了。
内容的提问来源于stack exchange,提问作者Mani
相关产品推荐
相关产品推荐

