2016-11-15 22 views
4

hbase接続プールを作成しようとしています。私は以下のことを試しました。しかし、私はその結果を知らない。それは私のパフォーマンスに影響を及ぼしますか?誰でも助けてくれますか?ホストはリモートまたはローカルにすることもできます。Hbase接続プール

HashMap cons = new HashMap(); 
    public void getDataFromHbase(String host, String tableid){ 
     conf.set("hbase.zookeeper.quorum", host); 
     ThreadPoolExecutor executor= (ThreadPoolExecutor) Executors.newCachedThreadPool(); 
     executor.setMaximumPoolSize(50); 
     if(cons.get(host+"tableA_"+tableid) != null){ 
      table1 = cons.get(host+"tableA_"+tableid); 
      table2 = cons.get(host+"tableB_"+tableid); 
     } 
     else{ 
      table1 = new HTable(conf,Bytes.toBytes("tableA_"+tableid),executor); 
      table2 = new HTable(conf,Bytes.toBytes("tableB_"+tableid),executor); 
      cons.put(host+"tableA_"+tableid,table1); 
      cons.put(host+"tableB_"+tableid,table2); 
     } 
     Scan scan = new Scan(); 
     scan.addFamily(Bytes.toBytes("n")); 
     scan.setCaching(1000); 
     ResultScanner resultScanner = table1.getScanner(scan); 
     ResultScanner resultScannerB = table2.getScanner(scan); 
    } 

答えて

2

私は...もっとエラーが発生しやすいとをデバッグするのは難しいではなく独自の接続管理をHTablePoolをお勧めします。

クラスHTablePool

java.lang.Objectのorg.apache.hadoop.hbase.client.HTablePool

すべての実装されたインタフェース:

閉鎖可能、AutoCloseable

推奨されていません。代わりにHConnection.getTable(String)を使用してください。

パブリッククラスHTablePoolは、オブジェクトが閉鎖可能

HTableインスタンスのシンプルなプールを実装して拡張します。各HTablePoolは すべてのテーブルのプールとして機能します。使用するには、HTablePoolをインスタンス化し、getTable(String) を使用してプールからHTableを取得します。このメソッドは不要です。 クライアントは テーブルをプールに返すのではなく、HTableInterface.close()を呼び出す必要があります。終了したら ではなくHTableInterface.close()を呼び出して HTableInterfaceのインスタンスを閉じます。テーブルをプールに置き換えます(廃止予定) putTable(HTableInterface)。各 テーブルに対して保持される最も多くのHTable参照を定義するmaxSizeでプールを作成できます。 それ以外の場合は、デフォルトはInteger.MAX_VALUEです。

プールは、クラスタへの独自の接続を管理します。 HConnectionManagerを参照してください。

+0

私の回答が役に立ちました。もしあなたが何かを持っているなら、あなたは質問をする。 –