我正在尝试创建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);
}
答案 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 强>