HBase - 解决HBase Client无法连接远程HBase Server问题

1,问题描述

(1)在远程服务器上搭建了个HBase 服务,并且在服务器上使用 hbase shell 命令行工具可以成功进行建表、插入数据、查询数据等操作。
(2)但是发现在项目中使用 HBase Client 能够成功与 Zookeeper 连接,却无法与 HBase Server 连接,错误信息如下:

2,问题原因

(1)HBase 启动之后会将 Master 的信息存储在 Zookeeper 的 /hbase/master 中,然后 HBase Client 连接到 Zookeeper 后首先会从 Zookeeper 中获取 Master 的 IP 和端口信息,然后才和 Master 建立连接。
(2)但是 /hbase/master 存储的可能是一个别名(例如 localhost 或者其他),如果客户端拿到 localhost 或者其他没有记录在 hosts 的别名,那么客户端将会无法连接到 HBase Server。
(3)从上面截图可以看到,访问的别名确实是 hostname=localhost,那么自然无法连接成功。通过 HBase 的 Web UI 也可以看到 Server 确实是 localhost:

3,解决办法

(1)首先登录服务器,执行如下命令将主机名字改成 master(改成其他也行,只要不是 localhost)

hostnamectl set-hostname master

(2)接着执行如下命令编辑 /etc/hosts 文件:

vim /etc/hosts

(3)将 127.0.0.1 的别名设置为 master:或者自己外网ip 对应master

(4)保存退出后重启服务器,可以看到主机名已经变成 master 了:

 (5)通过 HBase 的 Web UI 也可以看到 ServerName 也变成了 master: 

 

(6)服务器设置完毕后,本机客户端的 hosts 文件加上也要加上 HBase 服务器对应的 hosts,这样客户端就可以连上 HBase 服务了:
C:\Windows\System32\drivers\etc   
81.68.xx.xx master   此处为外网ip
 

注意如果一直连不上可以注释掉linux上外网对应 master的映射 

127.0.0.1 localhost.localdomain localhost
127.0.0.1 localhost4.localdomain4 localhost4
#81.68.xx.xx master

#::1 VM-16-6-centos VM-16-6-centos
::1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6

 

 

posted @ 2021-12-07 17:33  山河永慕~  阅读(2816)  评论(0编辑  收藏  举报