HBase概念学习(九)HTablePool为何弃用?
版权声明:本文为博主原创文章,未经博主同意不得转载。
https://blog.csdn.net/jiq408694711/article/details/36526433
转载请注明出处:jiq•钦's technical Blog
使用HBase0.94版本号的时候提示HTablePool已经过时了。为什么?
我们先看HConnection的getTable方法描写叙述:
getTable
HTableInterface getTable(is-external=true" rel="nofollow" title="class or interface in java.lang">String tableName)
throws IOExceptionRetrieve an HTableInterface implementation for access to a table. The returned HTableInterface is not thread safe, a new instance should be created for each using thread. This is a lightweight operation, pooling or caching of the returned
HTableInterface is neither required nor desired. Note that the HConnection needs to be unmanaged (created withHConnectionManager.createConnection(Configuration)
).- Parameters:
tableName
-- Returns:
- an HTable to use for interactions with this table
- Throws:
IOException
上面说HTable的的父类HTableInterface是非线程安全的,针对每一个线程建议都应该创建一个新的HTableInterface实例。这个创建过程是轻量的,缓存HTableInterface对象既不是必须的也不是推荐的!
然后再联想到仅仅要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");
}
至于HConnection对象怎样创建,HBase推荐使用的方法是:
createConnection
public static HConnection createConnection(org.apache.hadoop.conf.Configuration conf)
throws IOExceptionCreate a new HConnection instance using the passedconf
instance.Note: This bypasses the usual HConnection life cycle management done by
getConnection(Configuration)
. The caller is responsible for callingis-external=true#close%28%29" rel="nofollow" title="class or interface in java.io">
Closeable.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();
- Parameters:
conf
- configuration- Returns:
- HConnection object for
conf
- Throws:
ZooKeeperConnectionException
IOException
以下代码是我依照单例模式维护HConnection对象的样例:
public 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为何弃用?的更多相关文章
- Hadoop HBase概念学习系列之RowKey设计(二十九)
HBase里的RowKey设计,分为随机查询的RowKey设计和连续查询的RowKey设计.
- Hadoop HBase概念学习系列之HBase里的HStore(十九)
Store在HBase里称为HStore.HStore包括MemStore和StoreFiles.
- Hadoop HBase概念学习系列之物理视图(又名为物理模型)(九)
虽然,从HBase的概念视图来看,每个表格是由很多行组成的,但是在物理存储上面,它是按照列来保存的,这一点在进行数据设计和程序开发的时候必须牢记. 在物理存储上面,它是按照列来保存的 需要注意的是,在 ...
- 【甘道夫】HBase连接池 -- HTablePool是Deprecated之后
说明: 近期两天在调研HBase的连接池,有了一些收获,特此记录下来. 本文先将官方文档(http://hbase.apache.org/book.html)9.3.1.1节翻译,方便大家阅读,然后查 ...
- HBase概念学习(十)HBase与MongDB等NoSQL数据库对照
转载请注明出处: jiq•钦's technical Blog - 季义钦 一.开篇 淘宝之前使用的存储层架构一直是MySQL数据库,配合以MongDB,Tair等存储. MySQL因为开源,而且生态 ...
- HBase概念学习(七)HBase与Mapreduce集成
这篇文章是看了HBase权威指南之后,依据上面的解说搬下来的样例,可是略微有些不一样. HBase与mapreduce的集成无非就是mapreduce作业以HBase表作为输入,或者作为输出,也或者作 ...
- Hadoop HBase概念学习系列之HBase里的客户端和HBase集群建立连接(详细)(十四)
需要遵循以下步骤: 1.客户端和Zookeeper集群建立连接.在这之前客户端需要获得一些信息(可以从HBase配置文件中读取或是直接指定).客户端从Zookeeper集群中读取-ROOT-表的位置信 ...
- Hadoop HBase概念学习系列之META表和ROOT表(六)
在 HBase里的HRegion 里,谈过,HRegion是按照表名+开始/结束主键,即表名+主键范围来区分的.由于主键范围是连续的,所以一般用开始主键就可以表示相应的HRegion了. 不过,因为我 ...
- Hadoop HBase概念学习系列之HBase里的HRegion(五)
首先,要区分,HRegion服务器包含两大部分:HLog部分和HRegion部分 HBase里的HRegion服务器 HBase里的HRegion 当表的大小超过设置值的时候,HBase会自动将表划 ...
随机推荐
- angularjs学习第三天笔记(过滤器第二篇---filter过滤器及其自定义过滤器)
您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点 ...
- [EWS]如何: 通过使用 Exchange 中的 EWS 流有关邮箱事件的通知
摘要 在之前的文章中,介绍ews拉通知的模式订阅邮件.详情可阅读这篇文章:EWS 通过SubscribeToPullNotifications订阅Exchange新邮件提醒 ,可以看到拉通知的模式,是 ...
- [日常] Go语言圣经--接口约定习题
Go语言圣经-接口1.接口类型是对其它类型行为的抽象和概括2.Go语言中接口类型的独特之处在于它是满足隐式实现的3.Go语言中还存在着另外一种类型:接口类型.接口类型是一种抽象的类型4.一个类型可以自 ...
- (六)彻底理解synchronized
1.sychronized简介 在学习知识之前,我们先来看一个现象 public class SynchronizedDemo implements Runnable { private static ...
- Java四中引用
在JDK1.2以后将对象应用分为4中,强引用,软引用,弱引用,虚引用,这样的方式可以更加灵活控制对象的声明周期 强引用 String str = "123"; ...
- Java面试题阶段汇总
初级面试题 Java面试题-基础篇一 Java面试题-基础篇二 Java面试题-集合框架篇三 Java面试题-基础篇四 Java面试题-基础篇五 Java面试题-javaweb篇六 Java面试题 ...
- 【10-2】复杂业务状态的处理(从状态者模式到FSM)
一.概述 我们平常在开发业务模块时,经常会遇到比较复杂的状态转换.比如说用户可能有新注册.实名认证中.已实名认证.禁用等状态,支付可能有等待支付.支付中.已支付等状态.OA系统里的状态处理就更多了. ...
- 用Dreamweaver离线编写WordPress文章
WordPress 自带的编辑器功能较弱,也不支持离线写文章.Windows Live Writer功能还行,不过早就停止更新了.如何能够找到一个功能强大的,可以离线编辑文章的WordPress文章编 ...
- WebKit的Platform接口部分
转载请注明出处:http://www.cnblogs.com/fangkm/p/3787977.html WebKit中解析.渲染网页的过程中需要一些功能,比如: socket连接.URL资源请求的实 ...
- js-ES6学习笔记-async函数(2)
1.async函数返回一个 Promise 对象. async函数内部return语句返回的值,会成为then方法回调函数的参数. async function f() { return 'hello ...