`

hbase之htable线程安全性

阅读更多

在单线程环境下使用hbase的htable是没有问题,但是突然高并发多线程情况下就出现问题了,然后细看htable的api说明

 

Java代码   收藏代码
  1. * This  class  is not thread safe  for  updates; the underlying write buffer can  
  2.  * be corrupted if  multiple threads contend over a single HTable instance.  

 好吧 ,还是使用前没有细看api的文档说明,而且测试也没有测试多线程使用的情况,检讨下,那么对应的解决方案呢?

 

当然hbase肯定有自己的解决方案,那就是HTablePool,我们这下仔细看看api文档说明

 

Java代码   收藏代码
  1. /**  
  2.  * A simple pool of HTable instances.<p>  
  3.  *  
  4.  * Each HTablePool acts as a pool for all tables.  To use, instantiate an  
  5.  * HTablePool and use {@link #getTable(String)} to get an HTable from the pool.  
  6.  * Once you are done with it, return it to the pool with {@link #putTable(HTableInterface)}.  
  7.  *   
  8.  * <p>A pool can be created with a <i>maxSize</i> which defines the most HTable  
  9.  * references that will ever be retained for each table.  Otherwise the default  
  10.  * is {@link Integer#MAX_VALUE}.  
  11.  *  
  12.  * <p>Pool will manage its own cluster to the cluster. See {@link HConnectionManager}.  
  13.  */   

 

文档里说,使用getTable来取,当使用完了要用putTable归还,ok,这就是要使用finally块了。

 

大概的代码结构如下:

 

 

Java代码   收藏代码
  1.               Result result =  null ;  
  2. HTable table = null ;  
  3. try  {  
  4.     table =  (HTable)hbaseTablePool.getTable(tablename);  
  5.     if (table ==  null throw   new  RuntimeException(TABLE_NOT_EXIST);  
  6.     result = table.get(xxxxxx);  
  7. catch  (IOException e) {  
  8.     throw   new  RuntimeException(e);  
  9. }finally  {  
  10.     if (table !=  null ) {  
  11.         hbaseTablePool.putTable((HTableInterface)htable);  
  12.     }  
  13. }  

 

   那pool是如何实例化的呢

Java代码   收藏代码
  1. HTablePool  hbaseTablePool =  new  HTablePool(hbaseStoreFactory.getConfiguration(), this .maxConnection);  
  2.   
  3. //为了检验table的正确性,调用一次       
  4. hbaseTablePool.putTable(this .hbaseTablePool.getTable(tablename));     

 

   仔细看看HTablePool的实现,其实不是pool的概念,只是一个计数器实现而已,相比java的线程池的实现真是很丑陋,希望hbase能给一个比较好的实现了。

更多信息请查看 java进阶网 http://www.javady.com

分享到:
评论

相关推荐

    多线程 hbase

    2. **HBase客户端API**:HBase提供了Java客户端API,支持线程安全的`HTablePool`,这个池可以管理多个`HTable`实例,每个实例对应一个HBase表,允许多线程共享和复用这些实例,减少创建和销毁HTable对象的开销。...

    HbaseTemplate 操作hbase

    HBase是建立在Hadoop文件系统(HDFS)之上,为处理大规模数据提供了一个高效的数据存储解决方案。而Spring Data Hadoop是Spring框架的一部分,它提供了与Hadoop生态系统集成的工具,包括对HBase的操作支持。本篇文章...

    hadoop,hbase,hive版本整合兼容性最全,最详细说明【适用于任何版本】

    本文将介绍Hadoop、HBase、Hive以及ZooKeeper的版本整合兼容性,以及如何根据版本找到兼容性信息。 首先,Hadoop是一个开源的分布式存储和计算框架,它由HDFS和MapReduce两部分组成。HDFS用于存储大数据,而...

    java操作Hbase之从Hbase中读取数据写入hdfs中源码

    记住,为了保证程序的稳定性和效率,你需要对HBase和HDFS的配置进行适当的优化,比如设置合理的缓存大小、批处理大小等。此外,理解HBase的Region分布和HDFS的Block策略也是至关重要的。在进行大数据操作时,理解并...

    HBase开启审计日志

    随着数据安全的重要性日益凸显,HBase提供了多种安全机制来保障数据的安全性。其中,审计日志功能是记录用户对HBase进行的各种操作的重要工具,对于监控和审查系统行为非常关键。 #### 二、配置HBase审计日志 ####...

    Hbase几种入库方式

    多线程入库是指同时使用多个线程将数据写入到 Hbase 中。这种方式的优点是可以提高写入速度,缺点是需要编写多线程程序,增加了程序的复杂度。 小结 Hbase 入库方式的选择取决于具体的业务需求和数据规模。预先...

    Hbase调用JavaAPI实现批量导入操作

    在大数据处理领域,Apache HBase是一个分布式的、版本化的NoSQL数据库,它构建于Hadoop之上,特别适合处理海量结构化数据。这篇博客“Hbase调用Java API实现批量导入操作”聚焦于如何利用Java编程语言高效地向HBase...

    hbase 的java代码 集合 hbase 0.96

    HBase是构建在Hadoop之上的,利用HDFS作为其底层存储。在Java中,我们通过HBase客户端API与HBase交互,这些API包括了`HBaseAdmin`、`HTable`、`Put`、`Get`、`Scan`等核心类。 1. **连接HBase**:在Java代码中,...

    HBase官方文档

    HBase支持通过Kerberos进行认证,以保证数据的安全性。 ### 架构 HBase的架构包括Master服务器、RegionServer、客户端、目录表等关键组件。架构的了解对高效使用HBase以及进行性能优化非常重要。 ### 外部APIs ...

    eclipse构建HBase开发环境并运行实例对Hbase建表增删改查

    首先需要创建一个HTable对象,然后使用Put对象将数据写入到HBase中。 ```java public static void put(String tablename, String row, String columnFamily, String column, String data) throws IOException { ...

    scala API 操作hbase表

    HBase是一个分布式、面向列的NoSQL数据库,它构建于Hadoop之上,提供实时访问大量数据的能力。Scala是一种强大的函数式编程语言,与Java虚拟机(JVM)兼容,因此非常适合编写HBase的客户端程序。 首先,确保你的...

    java操作Hbase之Hbase专用过滤器PageFilter的使用源代码

    在Java中操作HBase数据库时,我们经常需要对大量数据进行高效的检索和处理。HBase提供了多种过滤器机制,其中PageFilter是一种非常实用的工具,它可以帮助我们在查询时限制返回的结果数量,从而优化性能和内存使用。...

    藏经阁-云数据库HBase企业级安全解析.pdf

    * 高度的安全性和可靠性 结论 HBase企业级安全解析是HBase安全机制的重要组成部分。HBase的安全机制包括Access Controller coprocessor实现的ACL权限控制、RPC层的安全认证和HBase的WebUI支持https访问等多方面的...

    HBase学习利器:HBase实战

    安全性和权限管理**:HBase提供了细粒度的安全控制机制,可以通过ACL(Access Control List)来管理用户的访问权限,确保数据安全。 **5. 集成与生态**:HBase不仅与HDFS紧密结合,还与Hadoop生态系统中的其他组件...

    Hbase权威指南(HBase: The Definitive Guide)

    - **容错性**:通过数据复制和故障恢复机制,HBase能够在节点故障的情况下保证数据的可用性和一致性。 - **灵活的数据模型**:HBase允许用户在不需要预先定义数据结构的情况下插入和查询数据,这对于处理半结构化或...

    hbase安装与使用

    4. **配置 HBase 数据存储路径**:为了确保数据的安全性和持久性,需要修改 `conf/hbase-site.xml` 文件,设置 `hbase.rootdir` 属性值,指向期望的 HBase 数据存储路径。 ```xml &lt;name&gt;hbase.rootdir ...

    pinpoint的hbase初始化脚本hbase-create.hbase

    搭建pinpoint需要的hbase初始化脚本hbase-create.hbase

    hbase的基本crud封装

    例如,HBase提供了`HTable`的`checkAndPut()`方法支持原子性的检查与更新操作,以及`Batch`接口用于一次性执行多个`Put`、`Get`或`Delete`操作。 HBase的性能优化也是关键。可以通过调整表分区策略、预分割表、使用...

    HBase(hbase-2.4.9-bin.tar.gz)

    就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非...

    hbase用于查询客户端工具

    HBase是一种分布式、基于列族的NoSQL数据库,它在大数据领域中扮演着重要的角色,尤其是在需要实时查询大规模数据集时。...了解并熟练掌握这些客户端工具,可以极大地提高HBase的使用效率和灵活性。

Global site tag (gtag.js) - Google Analytics