zoukankan      html  css  js  c++  java
  • 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内部将相同表名的实例存在一个并行队列中。

  • 相关阅读:
    VC环境OpenSSL编译笔记
    手动造工具TaskJobManage
    Java性能分析工具
    ES77
    Flink消费kafka
    阻塞对列
    C# 超时事件
    毕业前做一件事
    PID控制器——控制网络爬虫速度
    2.5 OpenEuler 中C与汇编的混合编程(选做)
  • 原文地址:https://www.cnblogs.com/legendary/p/2701504.html
Copyright © 2011-2022 走看看