【完美解决】- 使用JavaApI 连接查询HBASE 出现 java.net.SocketTimeoutException: callTimeout=60000

博客主要讲述HBase连接查询时的报错问题。因HBase分布式特性,查询会用主机名访问其他主机元数据,若未设置对应主机名映射就会报错。解决办法是在hosts文件中加入映射,若仍不行,可检查是否有拦截、防火墙状态及链接IP是否正确。

1.报错

org.apache.hadoop.hbase.client.RetriesExhaustedException: 
Failed after attempts=36, exceptions:Tue May 28 08:16:11 CST 2019, null,
java.net.SocketTimeoutException: callTimeout=60000, callDuration=63316: cm5 row 'stu01,,'
on table 'hbase:meta' at region=hbase:meta,,1.1588230740, hostname=cm5,60020,1558923622597, seqNum=0

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这里注意上图 : .UnknownHostException: cm1 因为HBase也是分布式的 , 所以当你连接HBase , 并且查询的时候 , 它会查询其他主机的元数据 .,这个访问的时候会使用主机名访问 , 它会查询我们自己windows电脑上 cm1 对应的主机名 , 但是这个我又没有设置 , 所以报了
.UnknownHostException: cm1 错误 , 这里只需要在 hosts文件 中加入 ip 主机名 映射即可
如图 :
在这里插入图片描述

注意 : 如果还不行的话 可以检查下

  • 是不是开了360之类的拦截了 , 或者HBase的主机防火墙处于开启状态
  • 链接的ip 是否写正确了

更改之后
在这里插入图片描述

成功!

### HBase中由于SocketTimeoutException导致的连接被拒绝问题分析与解决HBase中,`java.net.SocketTimeoutException: callTimeout=60000, Connection refused` 是一个常见的错误,通常表明客户端尝试连接HBase的服务端时未能成功建立连接。以下是对该问题的详细分析和解决方案。 #### 1. 错误原因分析 此错误可能由以下几个方面引起: - **服务端未启动或配置不正确**:如果HBase的相关服务(如HMaster、RegionServer)未正常启动,或者监听地址配置错误,则会导致客户端无法连接到服务端[^4]。 - **网络问题**:客户端和服务端之间的网络连接可能存在问题,例如防火墙阻止了特定端口的访问,或者IP地址映射不正确[^5]。 - **超时设置过短**:默认的`callTimeout`值为60000毫秒(即60秒),如果网络延迟较高或服务端响应较慢,则可能导致超时[^1]。 - **ZooKeeper配置问题**:HBase依赖ZooKeeper进行协调,如果ZooKeeper的会话超时时间设置不当,也可能导致连接失败[^3]。 #### 2. 解决方案 以下是针对上述问题的具体解决方法: - **检查HBase服务状态** 确保HBase的所有相关服务(如HMaster和RegionServer)已正常启动,并且可以通过`jps`命令查看相关进程是否运行。如果发现某些节点未启动,需手动启动这些服务[^4]。 - **验证网络配置** 检查客户端和服务端之间的网络连通性。确保服务端的IP地址和端口号配置正确,特别是`hbase-site.xml`中的`hbase.zookeeper.quorum`和`hbase.master`等属性。同时,确认`/etc/hosts`文件中没有错误的IP地址映射[^5]。 - **调整超时参数** 如果网络延迟较高,可以适当增加`hbase.rpc.timeout`和`hbase.client.operation.timeout`的值。例如,在`hbase-site.xml`中添加以下配置: ```xml <property> <name>hbase.rpc.timeout</name> <value>120000</value> </property> <property> <name>hbase.client.operation.timeout</name> <value>180000</value> </property> ``` 这将把超时时间分别设置为120秒和180秒[^1]。 - **优化ZooKeeper配置** 调整ZooKeeper的会话超时时间和最大会话超时时间。例如,在`hbase-site.xml`中设置以下参数: ```xml <property> <name>zookeeper.session.timeout</name> <value>180000</value> </property> ``` 同时,确保ZooKeeper的配置文件中`maxSessionTimeout`的值与上述设置一致[^3]。 - **使用HBase修复工具** 如果问题仍然存在,可以尝试使用HBase自带的修复工具`hbase hbck`来检查和修复元数据问题。例如: ```bash hbase hbck -j ./hbase-hbck2-1.0.0-SNAPSHOT.jar assigns 06f74b91e6f7df813178f17500d76e02 ``` 该命令可以帮助修复损坏的Region分配[^3]。 #### 3. 示例代码 以下是一个简单的Java程序示例,用于连接HBase查询`hbase:meta`表: ```java Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", "localhost"); config.set("hbase.zookeeper.property.clientPort", "2181"); try (Connection connection = ConnectionFactory.createConnection(config)) { Table metaTable = connection.getTable(TableName.valueOf("hbase:meta")); Get get = new Get(Bytes.toBytes("stu,,")); Result result = metaTable.get(get); System.out.println("Result: " + result); } catch (IOException e) { e.printStackTrace(); } ``` ####
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兀坐晴窗独饮茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值