【質問】HBaseへの接続時の異常検出について

418 views
Skip to first unread message

Yama

unread,
Aug 20, 2015, 3:32:28 AM8/20/15
to Hadoopユーザー会
初めて書き込みさせて頂きます。
Hadoop、HBaseなど初心者です。

表題の件、質問させてください。
参考になるサイト(日本語希望)やアドバイスなど頂ければ、幸いです。
よろしくお願いいたします。



HBase 1.0.0にJava APIにてアクセスしているのですが、
接続異常の検出方法が分からずに困っています。

以下がソースの抜粋です。

---------------------------------------------
Configuration configuration = HBaseConfiguration.create();
configuration.set(HConstants.ZOOKEEPER_QUORUM, "192.168.xx.xx");
configuration.set("hbase.client.retries.number", Integer.toString(5));
configuration.set("zookeeper.session.timeout", Integer.toString(60000));
configuration.set("zookeeper.recovery.retry", Integer.toString(3));

// 接続
Connection connection = ConnectionFactory.createConnection(configuration);
---------------------------------------------


上記のzookeeperのIPアドレスを不正な内容にして、異常時の動作確認をしています。
「ConnectionFactory.createConnection」メソッドの部分で例外が発生するものと考えていたのですが、
そのまま処理が継続されます。
接続が出来ていない状態をどのように判断すれば良いのでしょうか?
接続処理完了後に、getなど、他の処理を行うのでしょうか?

また、「ConnectionFactory.createConnection」メソッドの呼び出し時に接続異常となっても、
接続ができる状態になったら自動的(getなどの処理時など)に復旧するのでしょうか?
(IPアドレスを不正な内容にしていたら、復旧しませんが・・・)

よろしくお願いいたします。

【環境】
 OS:CentOS 6.5(64ビット)
 HBase:1.0.0
 java:jdk1.7.0

Daisuke Kobayashi

unread,
Aug 26, 2015, 6:08:11 AM8/26/15
to hmy...@gmail.com, hado...@googlegroups.com
はじめまして。反応が遅れました、小林と申します。

ご認識のとおり、createConnection後に実際の処理を行う段階 (try文) で、問題があれば例外をキャッチするのだと思います。

https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/ConnectionFactory.html

また、手元で確認できていませんが、接続情報が正しければ (今回のようにIPそのものが異なるという状況ではないという前提)
サーバ側が受け入れ可能な段階でクライアントからの接続は成功すると思います。試してみてください。

--

---
このメールは Google グループのグループ「Hadoopユーザー会」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには hadoop-jp+...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。



--
Daisuke Kobayashi
Customer Operations Engineer, Cloudera

ふみみ

unread,
Aug 26, 2015, 7:21:02 PM8/26/15
to Hadoopユーザー会
はじめまして。

こちらもYamaさんと同様の現象が発生しています。
IPアドレスをわざと違うものにして「ConnectionFactory.createConnection」メソッドを実行しても例外が発生しませんでした。
どうしたら異常検出できるのでしょうか?

HBaseのバージョンは同じく1.0.0です。

以上、よろしくお願いします。

Yama

unread,
Aug 26, 2015, 8:13:48 PM8/26/15
to Hadoopユーザー会, hmy...@gmail.com
小林さん
回答ありがとうございます。

はじめまして、Yamaです。

投稿させて頂いたソース(抜粋)で、動作を確認しているのですが、やはり例外は発生せず、
処理が継続されています。
「ConnectionFactory.createConnection」メソッドの実行時、出力されるログを貼り付けました。
メソッド内部で例外がキャッチされて、外部にはスローされていないようです。

よろしくお願いいたします。

--------------------------------以下、ログです----------------------------------
15/08/27 08:55:19 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
15/08/27 08:55:28 INFO zookeeper.RecoverableZooKeeper: Process identifier=hconnection-0x3db9b677 connecting to ZooKeeper ensemble=192.168.xx.xx:2181
15/08/27 08:55:28 INFO zookeeper.ZooKeeper: Client environment:zookeeper.version=3.4.5-cdh5.4.4--1, built on 07/06/2015 23:44 GMT
15/08/27 08:55:28 INFO zookeeper.ZooKeeper: Client environment:host.name=Tst1.tst.com
15/08/27 08:55:28 INFO zookeeper.ZooKeeper: Client environment:java.version=1.7.0_45
15/08/27 08:55:28 INFO zookeeper.ZooKeeper: Client environment:java.vendor=Oracle Corporation
15/08/27 08:55:28 INFO zookeeper.ZooKeeper: Client environment:java.home=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.45.x86_64/jre
                   :(INFOの出力を省略)
15/08/27 08:55:28 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=192.168.xx.xx:2181 sessionTimeout=60000 watcher=hconnection-0x3db9b6770x0, quorum=192.168.xx.xx:2181, baseZNode=/hbase
15/08/27 08:55:28 INFO zookeeper.ClientCnxn: Opening socket connection to server 192.168.xx.xx/192.168.xx.xx:2181. Will not attempt to authenticate using SASL (unknown error)
15/08/27 08:56:28 INFO zookeeper.ClientCnxn: Client session timed out, have not heard from server in 60059ms for sessionid 0x0, closing socket connection and attempting reconnect
15/08/27 08:56:28 WARN zookeeper.RecoverableZooKeeper: Possibly transient ZooKeeper, quorum=192.168.xx.xx:2181, exception=org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid
15/08/27 08:56:28 INFO util.RetryCounter: Sleeping 1000ms before retry #0...
15/08/27 08:56:29 INFO zookeeper.ClientCnxn: Opening socket connection to server 192.168.xx.xx/192.168.xx.xx:2181. Will not attempt to authenticate using SASL (unknown error)
15/08/27 08:57:28 INFO zookeeper.ClientCnxn: Client session timed out, have not heard from server in 60059ms for sessionid 0x0, closing socket connection and attempting reconnect
15/08/27 08:57:28 WARN zookeeper.RecoverableZooKeeper: Possibly transient ZooKeeper, quorum=192.168.xx.xx:2181, exception=org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid
15/08/27 08:57:28 INFO util.RetryCounter: Sleeping 2000ms before retry #1...
15/08/27 08:57:29 INFO zookeeper.ClientCnxn: Opening socket connection to server 192.168.xx.xx/192.168.xx.xx:2181. Will not attempt to authenticate using SASL (unknown error)
15/08/27 08:58:28 INFO zookeeper.ClientCnxn: Client session timed out, have not heard from server in 60057ms for sessionid 0x0, closing socket connection and attempting reconnect
15/08/27 08:58:29 WARN zookeeper.RecoverableZooKeeper: Possibly transient ZooKeeper, quorum=192.168.xx.xx:2181, exception=org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid
15/08/27 08:58:29 INFO util.RetryCounter: Sleeping 4000ms before retry #2...
15/08/27 08:58:30 INFO zookeeper.ClientCnxn: Opening socket connection to server 192.168.xx.xx/192.168.xx.xx:2181. Will not attempt to authenticate using SASL (unknown error)
15/08/27 08:59:29 INFO zookeeper.ClientCnxn: Client session timed out, have not heard from server in 60054ms for sessionid 0x0, closing socket connection and attempting reconnect
15/08/27 08:59:29 WARN zookeeper.RecoverableZooKeeper: Possibly transient ZooKeeper, quorum=192.168.xx.xx:2181, exception=org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid
15/08/27 08:59:29 INFO util.RetryCounter: Sleeping 8000ms before retry #3...
15/08/27 08:59:30 INFO zookeeper.ClientCnxn: Opening socket connection to server 192.168.xx.xx/192.168.xx.xx:2181. Will not attempt to authenticate using SASL (unknown error)
15/08/27 09:00:29 INFO zookeeper.ClientCnxn: Client session timed out, have not heard from server in 60051ms for sessionid 0x0, closing socket connection and attempting reconnect
15/08/27 09:00:29 WARN zookeeper.RecoverableZooKeeper: Possibly transient ZooKeeper, quorum=192.168.xx.xx:2181, exception=org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid
15/08/27 09:00:29 ERROR zookeeper.RecoverableZooKeeper: ZooKeeper exists failed after 4 attempts
15/08/27 09:00:29 WARN zookeeper.ZKUtil: hconnection-0x3db9b6770x0, quorum=192.168.xx.xx:2181, baseZNode=/hbase Unable to set watcher on znode (/hbase/hbaseid)
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid
 at org.apache.zookeeper.KeeperException.create(KeeperException.java:99)
 at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
 at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1041)
 at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.exists(RecoverableZooKeeper.java:222)
 at org.apache.hadoop.hbase.zookeeper.ZKUtil.checkExists(ZKUtil.java:481)
 at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:65)
 at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:86)
 at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.retrieveClusterId(ConnectionManager.java:850)
 at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:635)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
 at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238)
 at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:218)
 at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:119)
 at HBaseTst.Tst.connection(Tst.java:284)
 at HBaseTst.Tst.main(Tst.java:43)
15/08/27 09:00:29 ERROR zookeeper.ZooKeeperWatcher: hconnection-0x3db9b6770x0, quorum=192.168.xx.xx:2181, baseZNode=/hbase Received unexpected KeeperException, re-throwing exception
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid
 at org.apache.zookeeper.KeeperException.create(KeeperException.java:99)
 at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
 at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1041)
 at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.exists(RecoverableZooKeeper.java:222)
 at org.apache.hadoop.hbase.zookeeper.ZKUtil.checkExists(ZKUtil.java:481)
 at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:65)
 at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:86)
 at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.retrieveClusterId(ConnectionManager.java:850)
 at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:635)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
 at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238)
 at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:218)
 at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:119)
 at HBaseTst.Tst.connection(Tst.java:284)
 at HBaseTst.Tst.main(Tst.java:43)
15/08/27 09:00:29 WARN client.ZooKeeperRegistry: Can't retrieve clusterId from Zookeeper
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid
 at org.apache.zookeeper.KeeperException.create(KeeperException.java:99)
 at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
 at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1041)
 at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.exists(RecoverableZooKeeper.java:222)
 at org.apache.hadoop.hbase.zookeeper.ZKUtil.checkExists(ZKUtil.java:481)
 at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:65)
 at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:86)
 at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.retrieveClusterId(ConnectionManager.java:850)
 at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:635)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
 at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238)
 at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:218)
 at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:119)
 at HBaseTst.Tst.connection(Tst.java:284)
 at HBaseTst.Tst.main(Tst.java:43)
(ここで、「ConnectionFactory.createConnection」メソッドを抜けます)
15/08/27 09:00:30 INFO zookeeper.ClientCnxn: Opening socket connection to server 192.168.xx.xx/192.168.xx.xx:2181. Will not attempt to authenticate using SASL (unknown error)
15/08/27 09:01:30 INFO zookeeper.ClientCnxn: Client session timed out, have not heard from server in 61058ms for sessionid 0x0, closing socket connection and attempting reconnect
15/08/27 09:01:31 INFO zookeeper.ClientCnxn: Opening socket connection to server 192.168.xx.xx/192.168.xx.xx:2181. Will not attempt to authenticate using SASL (unknown error)
15/08/27 09:02:31 INFO zookeeper.ClientCnxn: Client session timed out, have not heard from server in 61060ms for sessionid 0x0, closing socket connection and attempting reconnect
                   :(以後、自動的に再接続を繰り返す)

Yama

unread,
Sep 1, 2015, 9:27:49 PM9/1/15
to Hadoopユーザー会, hmy...@gmail.com
お世話になります。
Yamaです。

本件、「ConnectionFactory.createConnection」メソッドは、HBaseに接続されていない場合でも、
例外が発生しないケースがあるので、メソッドの呼び出し後に、他のコマンド(getなど)を実行する
ように考えたいと思います。

小林さん、ふみみさん、回答を頂きありがとうございました。
Reply all
Reply to author
Forward
0 new messages