Hbase连接池

时间:2016-11-15 09:34:58

标签: java 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);
    }

1 个答案:

答案 0 :(得分:2)

我建议使用HTablePool ..而不是自己的连接管理,这更容易容易出错且难以调试

  

类HTablePool

     

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

     

所有已实施的接口:

     

可关闭,自动关闭

     

已过时。改为使用HConnection.getTable(String)。

     

公共类HTablePool extends Object实现了Closeable

     

一个简单的HTable实例池。每个HTablePool充当一个池   所有表格。要使用,实例化一个HTablePool并使用getTable(String)   从池中获取HTable。不再需要这种方法,   客户端应该调用HTableInterface.close()而不是返回   表到池完成后,关闭您的实例   HTableInterface通过调用HTableInterface.close()而不是   使用(已弃用)将表返回到池中   可回售(HTableInterface)。可以使用maxSize创建池   定义将为每个引用保留的最HTable引用   表。否则,默认值为Integer.MAX_VALUE。

     

池将管理自己与群集的连接。参见   的 HConnectionManager