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 文件:
vi /etc/hosts
(3)将 127.0.0.1 的别名设置为 master:
(4)保存退出后重启服务器,可以看到主机名已经变成 master 了:
(5)通过 HBase 的 Web UI 也可以看到 ServerName 也变成了 master:
(6)服务器设置完毕后,本机客户端的 hosts 文件加上也要加上 HBase 服务器对应的 hosts,这样客户端就可以连上 HBase 服务了: