版权声明:本文为博主原创文章,未经博主同意不得转载。

https://blog.csdn.net/jiq408694711/article/details/36526433

转载请注明出处:jiq•钦's technical Blog

使用HBase0.94版本号的时候提示HTablePool已经过时了。为什么?

我们先看HConnection的getTable方法描写叙述:

上面说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对象的样例:

  1. public void addUser(User user) throws IOException
  2. {
  3. HTableInterface usersTable = conn.getTable(TABLE_NAME);
  4. Put put = makePut(user);
  5. usersTable.put(put);
  6. usersTable.close();
  7. log.info("Add a User:"+user.name+" successfully");
  8. }

至于HConnection对象怎样创建,HBase推荐使用的方法是:

以下代码是我依照单例模式维护HConnection对象的样例:

  1. public class HBaseUtils {
  2. private static final String QUORUM = "192.168.1.100";
  3. private static final String CLIENTPORT = "2181";
  4. private static Configuration conf = null;
  5. private static HConnection conn = null;
  6. /**
  7. * 获取全局唯一的Configuration实例
  8. * @return
  9. */
  10. public static synchronized Configuration getConfiguration()
  11. {
  12. if(conf == null)
  13. {
  14. conf = HBaseConfiguration.create();
  15. conf.set("hbase.zookeeper.quorum", QUORUM);
  16. conf.set("hbase.zookeeper.property.clientPort", CLIENTPORT);
  17. }
  18. return conf;
  19. }
  20. /**
  21. * 获取全局唯一的HConnection实例
  22. * @return
  23. * @throws ZooKeeperConnectionException
  24. */
  25. public static synchronized HConnection getHConnection() throws ZooKeeperConnectionException
  26. {
  27. if(conn == null)
  28. {
  29. /*
  30. * * 创建一个HConnection
  31. * HConnection connection = HConnectionManager.createConnection(conf);
  32. * HTableInterface table = connection.getTable("mytable");
  33. * table.get(...); ...
  34. * table.close();
  35. * connection.close();
  36. * */
  37. conn = HConnectionManager.createConnection(getConfiguration());
  38. }
  39. return conn;
  40. }
  41. }

以上属于个人见解,假设有什么疑问和不吝赐教,欢迎指正。

可以联系邮箱:jiq408694711@163.com 交流,季义钦

HBase概念学习(九)HTablePool为何弃用?的更多相关文章

  1. Hadoop HBase概念学习系列之RowKey设计(二十九)

    HBase里的RowKey设计,分为随机查询的RowKey设计和连续查询的RowKey设计.

  2. Hadoop HBase概念学习系列之HBase里的HStore(十九)

    Store在HBase里称为HStore.HStore包括MemStore和StoreFiles.

  3. Hadoop HBase概念学习系列之物理视图(又名为物理模型)(九)

    虽然,从HBase的概念视图来看,每个表格是由很多行组成的,但是在物理存储上面,它是按照列来保存的,这一点在进行数据设计和程序开发的时候必须牢记. 在物理存储上面,它是按照列来保存的 需要注意的是,在 ...

  4. 【甘道夫】HBase连接池 -- HTablePool是Deprecated之后

    说明: 近期两天在调研HBase的连接池,有了一些收获,特此记录下来. 本文先将官方文档(http://hbase.apache.org/book.html)9.3.1.1节翻译,方便大家阅读,然后查 ...

  5. HBase概念学习(十)HBase与MongDB等NoSQL数据库对照

    转载请注明出处: jiq•钦's technical Blog - 季义钦 一.开篇 淘宝之前使用的存储层架构一直是MySQL数据库,配合以MongDB,Tair等存储. MySQL因为开源,而且生态 ...

  6. HBase概念学习(七)HBase与Mapreduce集成

    这篇文章是看了HBase权威指南之后,依据上面的解说搬下来的样例,可是略微有些不一样. HBase与mapreduce的集成无非就是mapreduce作业以HBase表作为输入,或者作为输出,也或者作 ...

  7. Hadoop HBase概念学习系列之HBase里的客户端和HBase集群建立连接(详细)(十四)

    需要遵循以下步骤: 1.客户端和Zookeeper集群建立连接.在这之前客户端需要获得一些信息(可以从HBase配置文件中读取或是直接指定).客户端从Zookeeper集群中读取-ROOT-表的位置信 ...

  8. Hadoop HBase概念学习系列之META表和ROOT表(六)

    在 HBase里的HRegion 里,谈过,HRegion是按照表名+开始/结束主键,即表名+主键范围来区分的.由于主键范围是连续的,所以一般用开始主键就可以表示相应的HRegion了. 不过,因为我 ...

  9. Hadoop HBase概念学习系列之HBase里的HRegion(五)

    首先,要区分,HRegion服务器包含两大部分:HLog部分和HRegion部分 HBase里的HRegion服务器  HBase里的HRegion 当表的大小超过设置值的时候,HBase会自动将表划 ...

随机推荐

  1. Redis有序集合操作

    有序集合存储着成员和分值之间的映射,并且提供了分值处理命令,以及根据分值大小有序的获取或扫描成员和分值的命令 (常用命令) ZADD : ZADD key-name score member [sco ...

  2. C#多线程和线程池[转]

    1.概念  1.0 线程的和进程的关系以及优缺点 windows系统是一个多线程的操作系统.一个程序至少有一个进程,一个进程至少有一个线程.进程是线程的容器,一个C#客户端程序开始于一个单独的线程,C ...

  3. [日常] Go语言圣经--并发的web爬虫

    两种: crawler.go package main import ( "fmt" "links" //"log" "os&qu ...

  4. 深入理解Java虚拟机--阅读笔记一

    Java内存区域 一.java运行时数据区域 1. 程序计数器:程序计数器占据的内存空间较小,是当前运行线程执行的字节码的计数:分支.循环.跳转.异常处理.线程恢复等都要依赖技术器来对执行的字节码进行 ...

  5. Android - 序列化与反序列化

    http://www.cnblogs.com/yezhennan/p/5527506.html http://blog.csdn.net/wangchunlei123/article/details/ ...

  6. java设计模式-----21、备忘录模式

    概念: Memento模式也叫备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式,它的作用是保存对象的内部状态,并在需要的时候(u ...

  7. Code Signal_练习题_Circle of Numbers

    Consider integer numbers from 0 to n - 1 written down along the circle in such a way that the distan ...

  8. tilestache

    pip install tilestache -i https://mirrors.ustc.edu.cn/pypi/web/simple python C:/Python27/ArcGIS10.4/ ...

  9. AsyncTask GET请求

    布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...

  10. 微信小程序获取Access_token和页面URL生成小程序码或二维码

    1.微信小程序获取Access_token: access_token具体时效看官方文档. using System; using System.Collections.Generic; using ...