spark sql 创建表时候出现hostName:9000 failed on connection exception:

在Spark on Yarn模式下,通过Beeline连接Spark ThriftServer访问Spark时,遇到连接异常问题。排查过程包括:检查防火墙、确认节点上无进程监听9000端口、搜索配置文件无异常、尝试创建数据库和表以排除问题。最终通过远程debug Spark的ThriftServer进程,发现在通过HiveClientImpl访问元数据库时存在错误的HDFS连接串,修正后问题解决。总结强调了理解Spark建表流程、勇于质疑和掌握远程debug的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:spark on yarn模式下通过beeline连接spark thriftserver访问spark。

问题:如下图,使用beeline的时候,可以正常切换数据库、显示有多少张表。但是在使用默认数据库(default)的时候出现,如下图所示的问题failed on connection exception:

问题定位:

(1)从异常出发,排除了防火墙的原因;

(2)进入问题节点:使用netstat -nltp | grep 9000,发现该节点就没有进程监听9000端口。

另外当前的hadoop集群正常,只是比较low的是,只是启动一个namenode,并没有ha模式。

再根据以上情况,初步判断初始化FileSystem的时候,读取了错误配置。下面开始搜索错误配置:

(3)进入spark_home下,搜索hostname:9000,

          grep -lr  'hostname:9000'  ${SPARK_HOME}/conf;

          grep -lr 'hostName:9000'  ${HADOOP_HOME}/etc/hadoop;

         然并卵,没有发现异常namenode的配置

(4)随后,无意间自己创建数据库,再创建表,竟然能够

### Hadoop 连接异常问题分析 当遇到 `java.net.ConnectException: Connection refused` 错误时,通常明客户端尝试连接到指定的服务器地址和端口时被拒绝。以下是可能的原因以及解决方案: #### 1. **NameNode服务未启动** 如果 NameNode 没有正常运行,则任何试图通过 RPC 或 HTTP 访问它的请求都会因无法建立连接而失败。可以通过以下命令检查 NameNode 的状态: ```bash jps ``` 上述命令会显示当前 JVM 中正在运行的进程列。如果没有看到类似于 `NameNode` 的条目,则说明该服务尚未启动。 可以尝试重新格式化并启动 NameNode 和 DataNodes[^1]: ```bash hdfs namenode -format start-dfs.sh ``` #### 2. **配置文件中的主机名或IP错误** 确认核心站点配置文件 (`core-site.xml`) 是否正确设置了 fs.defaultFS 属性指向实际可用的名字节点位置。例如: ```xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop0:9000</value> </property> </configuration> ``` 这里假设名字节点位于机器名为 hadoop0 上,默认监听的是 9000 端口。如果此设置不匹配集群实际情况或者网络不可达也会引发此类错误[^3]。 #### 3. **防火墙阻止了必要的通信端口** 即使所有组件都已正确定位并且能够相互发现彼此的位置,但如果存在活跃的操作系统级防火墙可能会拦截这些流量。对于标准HDFS部署来说至少需要开放以下几个重要端口号: - 8032 (YARN ResourceManager API) - 50070 (旧版Web UI界面, 新版本改成了9870) 验证是否有规则阻挡它们的方法之一就是临时关闭iptables服务来进行测试(生产环境慎用): ```bash sudo systemctl stop firewalld.service ``` #### 4. **资源管理器(RM)地址绑定不当** 另外需要注意的是,在某些情况下虽然名称节点本身工作良好但仍可能出现类似的connection refused消息,这是因为应用程序还依赖其他子系统的支持比如MapReduce框架下的ResourceManager。此时应核查yarn-site.xml里关于RM的具体定义是否恰当无误。 ```xml <property> <name>yarn.resourcemanager.address</name> <value>sparka:8032</value> </property> ``` 确保这里的hostname sparka解析得到的目标设备确实承载着对应功能模块实例,并且相应软件包已经安装完毕处于活动态之中. 综上所述,针对这个问题可以从以上几个方面逐一排查直至找到根本原因加以修正为止。 ```python # 示例Python脚本用于自动化检测部分常见状况 import socket def test_connection(host,port): try: sock = socket.create_connection((host, port)) print(f"Successfully connected to {host}:{port}") sock.close() except Exception as e: print(f"Failed to connect to {host}:{port}, error={e}") test_connection('hadoop0', 9000) test_connection('sparka', 8032) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值