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
早年同窗始相知,三载瞬逝情却萌。年少不知愁滋味,犹读红豆生南国。别离方知相思苦,心田红豆根以生。