转载请注明出处:jiq?钦‘s technical Blog
我们先看HConnection的getTable方法描述:
HTableInterface getTable(String tableName) throws IOException
HConnectionManager.createConnection(Configuration)).tableName - IOException
然后再联想到只要HTable使用的Configuration是同一个,那么它们一定是共用一个HConnection的,HConnection才是HBase客户端到Hbase集群的真正的连接。
再想想HTablePool的作用,无非就是HTable的连接池,里面维护的HTable应该来说都是使用的同一个HConnecion。
既然HTable的创建是轻量级的,使用同一个Confuguration的HTable都会共用一个HConnection,那么HTablePool就显得那么多余!
所以Hbase抛弃了HTablePool,我们唯一要做的就是保证HConnection实例是唯一的,全局共享的。然后针对HTableInterface对象最好在每次操作HBase表的时候根据HConnection对象来重新创建,使用完成之后及时关闭即可!
通过HConnection的getTable()方法就能够获取到用户操作HBase表的HTableInterface对象了。
下面是一个使用HConnection的getTable()方法获取HTableInterface对象的例子:
public void addUser(User user) throws IOException
{
HTableInterface usersTable = conn.getTable(TABLE_NAME);
Put put = makePut(user);
usersTable.put(put);
usersTable.close();
log.info("Add a User:"+user.name+" successfully");
}public static HConnection createConnection(org.apache.hadoop.conf.Configuration conf) throws IOException
conf instance.
Note: This bypasses the usual HConnection life cycle management done by
getConnection(Configuration). The caller is responsible for callingCloseable.close()
on the returned connection instance. This is the recommended way to create HConnections.HConnection connection = HConnectionManager.createConnection(conf); HTableInterface table = connection.getTable("mytable"); table.get(...); ... table.close(); connection.close();
conf - configurationconfZooKeeperConnectionExceptionIOExceptionpublic class HBaseUtils {
private static final String QUORUM = "192.168.1.100";
private static final String CLIENTPORT = "2181";
private static Configuration conf = null;
private static HConnection conn = null;
/**
* 获取全局唯一的Configuration实例
* @return
*/
public static synchronized Configuration getConfiguration()
{
if(conf == null)
{
conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", QUORUM);
conf.set("hbase.zookeeper.property.clientPort", CLIENTPORT);
}
return conf;
}
/**
* 获取全局唯一的HConnection实例
* @return
* @throws ZooKeeperConnectionException
*/
public static synchronized HConnection getHConnection() throws ZooKeeperConnectionException
{
if(conn == null)
{
/*
* * 创建一个HConnection
* HConnection connection = HConnectionManager.createConnection(conf);
* HTableInterface table = connection.getTable("mytable");
* table.get(...); ...
* table.close();
* connection.close();
* */
conn = HConnectionManager.createConnection(getConfiguration());
}
return conn;
}
}可以联系邮箱:jiq408694711@163.com 交流,季义钦
HBase概念学习(九)HTablePool为何弃用?,布布扣,bubuko.com
原文:http://blog.csdn.net/jiyiqinlovexx/article/details/36526433