2017-01-06 2 views
1

私たちの環境では、hbaseをhbase Java Clientで呼び出すマルチスレッドを使用し、操作を終了したときに各スレッドでConnection.close()を呼び出しますが、Connection.close()は約10ミリ秒、接続を閉じることなくスレッド間の接続を再利用できるかどうかを知ることができますか? HBaseの1.2、org.apache.hadoop.hbase.client.ConnectionのAPIドキュメントからマルチスレッド間でhbase Javaクライアント接続を再利用できますか?

+0

あなたはどのバージョンのhbaseを使用していますか? –

+0

あなたがやっていることのコードスニペットが必要です。また、古いhbaseと[ConnectionFactory](https://archive.cloudera.com/cdh5/cdh/5/hbase/apidocs/index.html?org)にHConnectionManagerを使用しようとしましたか? /apache/hadoop/hbase/client/HConnectionManager.html)最新のhbaseについては? –

+0

Hbaseバージョン1.2を使用しました –

答えて

0

https://hbase.apache.org/1.2/apidocs/org/apache/hadoop/hbase/client/Connection.html

接続の作成は、重い作業です。接続 の実装はスレッドセーフであるため、クライアントは 接続を一度作成して別のスレッドと共有できます。一方、テーブルと管理者の インスタンスは軽量で、 スレッドセーフではありません。通常、クライアントアプリケーションごとの単一接続は であり、すべてのスレッドは独自のテーブルインスタンスを取得します。 テーブルと管理のキャッシュまたはプーリングは推奨されません。

このクラスは、廃止予定のHConnectionを置き換えます。

はい、HBase接続を作成するのが遅いです。しかし、取得されたConnectionはスレッドセーフであり、アプリケーション内に1つのHBase接続しか持たないようにしてください(アプリケーションの終了/シャットダウン時に閉じる必要があります)。

ただし、Connectionから取得したオブジェクトを閉じるときに注意してください:Table、Admin、ResultScanner、...処理を終了したときに閉じる必要があるリソースを開きます。

+0

Connectionを閉じる必要はありませんか? – yuxh

+0

私は、アプリケーション間で共有するConnectionを1つだけ必要とすることを意味します。その後、アプリケーションが終了すると(JVMプロセス)、Connectionを閉じる必要があります。アプリケーションが長時間実行されているプロセス(マイクロサービス、Webアプリケーションなど)の場合は、それを行うためのシャットダウンが必要です。 – Comencau

関連する問題