• HTablePool的实现方法


    (一)HTablePool介绍


      HTablePool是HBase API中的重要类,可以通过HTablePool的getTable(String tableName)方法获得相应的HTable对象实体,用于进行对HBase表的增删改成等操作。一般情况下,客户端通过new 的方式来创建和销毁HTable的操作相对有较大的开销,而是用HTablePool方法创建的HTable则可以在jvm进程的生命周期内循环使用,以降低开销。

    (二)HTablePool的原理

      如果对某表的操作仅执行一次或连续执行的时间较短,则使用new的方法和使用HTablePool的getTable()方法的开销基本无区别,但是对于在JVM长期执行的程序(如web服务器会在长时间内多次频繁的对HBase的表进行操作),使用new创建的htable则会进行频繁的创建和销毁,而每次HTable对象在创建时需要配置大量的选项并存入自带的configuration对象中,另外每个HTable还自带一个线程池用以进行多线程操作,综合来看,使用HTablePool将大大节省时间和类的加载效率。

      下面介绍一下HTablePool如何存储和使用HTable实例:

      在HTablePool中有几个成员变量,分别是PoolMap tables (用于按照表名存放HTable实例)、int maxSize(限制PoolMap中每个表存放实例的数目)、PoolType pooltype(类型,表示存放在PoolMap中的HTable如何使用:Reusable, ThreadLocal, RoundRobin;)在 getHtable(表名) 时,先查询PoolMap中是否有该表的实例,若有则从Map中取出,若没有,新建一个HTable实例,并使用一个HTable的继承类包装一下(之所以包装是因为在HTable close方法中需要归还实例到HTablePool)。

      PoolMap类:内置了一个currentHashMap<K,Pool<V>>,实现Map接口,自行实现了Map的put及get方法。,Pool是接口,按照PoolType分成三个子类,分别使用使用creatPool方法创建,常用的实例类是ReusablePool类,该类继承了ConcurrentLinkedQueue类,因此,每个HTable首先按照表名存入一个PoolMap的value中,PoolMap内部将相同表名的实例存在一个并行队列中。

  • 相关阅读:
    linux安装java环境
    win7+ubuntu双系统安装攻略
    Ubuntu 安装基础教程
    我学到的算法
    linux使用su切换用户提示 Authentication failure的解决方法& 复制文件时,报cp: omitting directory `XXX'
    我新买的红米手机,新浪和360浏览器都能进,也能看电视,就是不能上手机QQ和微信
    电脑如何设置自动开机
    jsp分页技术
    发光文本框样式
    子元素div高度不确定时父div高度如何自适应
  • 原文地址:https://www.cnblogs.com/legendary/p/2701504.html
Copyright © 2020-2023  润新知