我编写了一个简单的 HBase 客户端程序来在我的 HBase 集群(1 个 Master 和 3 个 Region Server)中执行 CRUD 操作。Zookeeper 实例仅在主服务器中运行,法定人数包括所有 4 台服务器。集群运行良好,可以使用 YCSB 客户端执行读/写(意味着服务器/zookeeper 端没有任何问题)。
现在在 Eclipse 类路径中,我添加了所有 HBase 库和 hbase-0.94.7.jar(其中包含 hbase-default.xml 文件)。我还在项目的集群中添加了原始的 hbase-site.xml 文件。
最初,我使用未修改的 hbase-default.xml 运行客户端代码,我发现客户端正在尝试与 zookeeper 实例的 localhost 通信。从而忽略了 hbase-site.xml。
然后我修改了保存 Master/Zookpeer 服务器公共 IP 地址的 3 个参数并再次尝试。这次我收到以下错误,客户端不断尝试与 Zookeeper 及其其他仲裁成员连接。
我在 Zookeeper 仲裁中拥有所有 4 台服务器,可以说它们的 IP 地址是:
WWWW // HBase master 和 Zookeeper Server
XXXX // HBase RS 和 Zookeeper 法定成员
YYYY // HBase RS 和 Zookeeper 法定成员
ZZZZ // HBase RS 和 Zookeeper 仲裁成员
13/06/19 13:06:23 INFO zookeeper.ZooKeeper:启动客户端连接,connectString=WWWW:2181,XXXX:2181,YYYY:2181,ZZZZ:2181 sessionTimeout=180000 watcher=hconnection 13/06/19 13:06:23 INFO zookeeper.RecoverableZooKeeper:这个进程的标识符是5828@Kamal-VAIO 19 年 13 月 6 日 13:06:24 信息 zookeeper.ClientCnxn:打开与服务器 WWWW:2181 的套接字连接。不会尝试使用 SASL 进行身份验证(未知错误) 13/06/19 13:06:25 WARN zookeeper.ClientCnxn:服务器空会话 0x0,意外错误,关闭套接字连接并尝试重新连接 java.net.ConnectException:连接被拒绝:没有更多信息
19 年 13 月 6 日 13:06:25 WARN zookeeper.RecoverableZooKeeper:可能是暂时的 ZooKeeper 异常:org.apache.zookeeper.KeeperException$ConnectionLossException:KeeperErrorCode = ConnectionLoss for /hbase/hbaseid 19 年 13 月 6 日 13:06:25 信息 util.RetryCounter:在重试 #1 之前休眠 2000 毫秒... 19 年 13 月 6 日 13:06:25 信息 zookeeper.ClientCnxn:打开与服务器 XXXX:2181 的套接字连接。不会尝试使用 SASL 进行身份验证(未知错误) 19 年 13 月 6 日 13:06:26 WARN zookeeper.ClientCnxn:服务器空会话 0x0,意外错误,关闭套接字连接并尝试重新连接 java.net.ConnectException:连接被拒绝:没有更多信息
... 等等