且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Java客户端连接Zookeeper和HBase失败

更新时间:2022-10-25 10:29:32

问题已解决.

解决方案:

  1. 右键单击 Eclipse 中的项目
  2. 转到属性
  3. 选择 Java 构建路径
  4. 前往图书馆
  5. 点击添加类文件夹
  6. 添加一个名为 conf 的新文件夹
  7. 全部按OK
  8. 将我的 hbase-site.xml 复制到 conf 文件夹中
  9. 还将我的 HBase 集群的 ip-host 列表添加到 Win 7 主机文件中并保存.
  10. 运行 hbase 代码,客户端可以成功连接到 Zookeeper 和 HBase master.

注意:步骤 10 是必须的,否则客户端将从 Zookeeper 实例中获取主机名并且无法解析它们.

非常感谢大家.

I wrote a simple HBase client program to perform CRUD operations in my HBase cluster (1 Master and 3 Region Server). The Zookeeper instance is only running in the master server and the quorum includes all the 4 servers. The cluster is running fine and can perform read/write using YCSB client (means there are nothing wrong in the server/zookeeper side).

Now in the eclipse classpath I have added all the HBase libs and hbase-0.94.7.jar (which contains the hbase-default.xml file). I have also added the original hbase-site.xml file from the cluster in the project.

Initially, I ran the client code using the unmodified hbase-default.xml and what I've found that the client is trying to communicate with the localhost for zookeeper instance. And thus ignoring the hbase-site.xml.

Then I've modified the 3 parameters which holds the public IP address of the Master/Zookpeer server and tried again. This time I am getting the below error where the client is continuously trying to connect with the Zookeeper and its other quorum members.

I have all the 4 servers in the Zookeeper quorum and lets say their IP addresses are:

  • W.W.W.W // HBase master and Zookeeper Server

  • X.X.X.X // HBase RS and Zookeeper Quorum Member

  • Y.Y.Y.Y // HBase RS and Zookeeper Quorum Member

  • Z.Z.Z.Z // HBase RS and Zookeeper Quorum Member


13/06/19 13:06:23 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=W.W.W.W:2181,X.X.X.X:2181,Y.Y.Y.Y:2181,Z.Z.Z.Z:2181 sessionTimeout=180000 watcher=hconnection

13/06/19 13:06:23 INFO zookeeper.RecoverableZooKeeper: The identifier of this process is 5828@Kamal-VAIO

13/06/19 13:06:24 INFO zookeeper.ClientCnxn: Opening socket connection to server W.W.W.W:2181. Will not attempt to authenticate using SASL (unknown error)

13/06/19 13:06:25 WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect

java.net.ConnectException: Connection refused: no further information


13/06/19 13:06:25 WARN zookeeper.RecoverableZooKeeper: Possibly transient ZooKeeper exception: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid

13/06/19 13:06:25 INFO util.RetryCounter: Sleeping 2000ms before retry #1...

13/06/19 13:06:25 INFO zookeeper.ClientCnxn: Opening socket connection to server X.X.X.X:2181. Will not attempt to authenticate using SASL (unknown error)

13/06/19 13:06:26 WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect

java.net.ConnectException: Connection refused: no further information


... and so on

The Problem has been solved.

Solution:

  1. Right Click on the Project in Eclipse
  2. Go to Properties
  3. Select Java Build Path
  4. Go to Libraries
  5. Click Add Class Folder
  6. Add a new folder named conf
  7. Press all OK
  8. Copy my hbase-site.xml into the conf folder
  9. Also add the ip-host lists of my HBase cluster into Win 7 hosts file and save.
  10. Run the hbase codes and the client can successfully connect to Zookeeper and HBase master.

NOTE: Step 10 is must, otherwise the client will get the hostnames from the Zookeeper instance and will not able to resolve them.

Many thanks everyone.