一。流程图
二。原理
在使用HTable前要建立一个HTablePool实例。明白这个可以考虑为table的factory:get 或close,或close pool都可以。这个实例会同时建立一个内部object:PoolMap,其实不是真正的map,只是一个wrapper而已。这个map包含以table为key,相对应key为values的Pool,这种pool三种类型,详细见上图。可以说这个map是对三种pool的一个proxy:get table ,close table etc.相应的操作会直接在相应pool中进行,如Resuable#get(),因为这些pool都已经实现了base class:Pool<Table>
再来看这三种类型pool的特点:
pool | features | 适用 |
Resuable | 重用池,内部利用一个queue,在close放到tail,get时取头部 | 一般情况都可以,避免因不同线程使用不同数量htable造成过载。 |
ThreadLocal | 线程本地池,就是一个线程只出来一个htable | 如果明确有些线程使用htables多,其它少 |
RoundRobin |
轮转,内部使用一个按maxsize arry,每次get时根据计数返回对应htable 由于这方式需要在使用前必须实例化maxsize对象,现在已经在94.2中没有使用 |
N/A |
再之,如果在建立Htablepool时使用不变的Configuration,那么最终所有的htable共享HConnection,因为建立connection是依据config所zk,hbase master等信息建立的。所以如果不是在cross cluster情况下不建议使用multi config。由于HConnection中也存在一个zkclient,所以如果只有一个HConnection也意味着共享了zk client。
所以在通常情况下,若干个rowkeys进行访问时,出现Thread:RS = M:N,如果所有rows在同一RS下,那么将出现N=1,即会阻塞访问。
刚开始使用时不清楚此机制,所以我们一直自己建立threadpool来并发访问,看来这是没必要的。#1
在HTablePool#getTAble()时,返回了一个封装了HTable的PooledTable,目的是为了可以在close()时可以进行干预:供PoolMap post process。以便进行回推还是按照maxsize直接抛弃。而对PooledHTable的使用时,直接使用组合方式(内嵌)的HTable,所以对客户端而言是透明的。
HTable内在threadpool,所以在进行访问时相同RS的会直接打包到一个caller下便于直接访问。所以如果同一次访问的rowkyes很大而且刚好命中在同一RS,那么使用#1处理方式很有必要。
由于使用HTablePool建立的HTable默认是autoFlush=true,所以在执行过程中没有必要立即调用flushCommits(),因为在close()时会默认执行了。另外如果对数据没有严格的安全要求,也可以不必总调用close()来结束操作,可以在系统完毕后再利用一个shutdown hook即可。这样对提高整体入库速度是有提高的。
怎样保证Pool是线程安全?除了ThreadLocal外,ResulablePool已经extends了ConcurrentLinkedQueue;RoundRobin extends CopyOnWriteArrayList,故在二者上的操作其实基本上是直接访问parent的methods,所以是安全的.
Ref:
相关推荐
《深入解析YCSB-HBase14-Binding 0.17.0》 YCSB(Yahoo! Cloud Serving Benchmark)是一种广泛使用的云数据库基准测试工具,它为各种分布式存储系统提供了标准化的性能评估框架。YCSB-HBase14-Binding 0.17.0是针对...
HBase(hbase-2.4.9-bin.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System...
HBase 元数据修复工具包。 ①修改 jar 包中的application.properties,重点是 zookeeper.address、zookeeper.nodeParent、hdfs....③开始修复 `java -jar -Drepair.tableName=表名 hbase-meta-repair-hbase-2.0.2.jar`
`hbase-1.2.0-cdh5.14.2.tar.gz` 是针对Cloudera Distribution Including Apache Hadoop (CDH) 5.14.2的一个特定版本的HBase打包文件。CDH是一个流行的Hadoop发行版,包含了多个大数据组件,如HDFS、MapReduce、YARN...
hbase-client-2.1.0-cdh6.3.0.jar
本文将深入探讨这两个技术及其结合体`phoenix-hbase-2.2-5.1.2-bin.tar.gz`的详细内容。 首先,HBase(Hadoop Database)是Apache软件基金会的一个开源项目,它构建于Hadoop之上,是一款面向列的分布式数据库。...
《Phoenix与HBase的深度解析:基于phoenix-hbase-2.4-5.1.2版本》 在大数据处理领域,Apache HBase和Phoenix是两个至关重要的组件。HBase作为一个分布式、列式存储的NoSQL数据库,为海量数据提供了高效、实时的访问...
赠送jar包:hbase-prefix-tree-1.4.3.jar; 赠送原API文档:hbase-prefix-tree-1.4.3-javadoc.jar; 赠送源代码:hbase-prefix-tree-1.4.3-sources.jar; 赠送Maven依赖信息文件:hbase-prefix-tree-1.4.3.pom; ...
phoenix-client-hbase-2.2-5.1.2.jar
标题“hbase-1.2.1-bin.tar.gz.zip”表明这是HBase 1.2.1版本的二进制发行版,以tar.gz格式压缩,并且进一步用zip压缩。这种双重压缩方式可能用于减小文件大小,方便在网络上传输。用户需要先对zip文件进行解压,...
被编译的hive-hbase-handler-1.2.1.jar,用于在Hive中创建关联HBase表的jar,解决创建Hive关联HBase时报FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop....
5. Indexing:虽然HBase本身不支持索引,但可以通过第三方库如 phoenix 或 hbase-indexer 实现索引功能。 六、监控与维护 1. 使用HBase自带的JMX监控工具或第三方监控工具(如Ambari、Grafana)监控HBase集群的...
《Phoenix与HBase的深度解析:基于phoenix-hbase-1.4-4.16.1-bin的探讨》 Phoenix是一种开源的SQL层,它为Apache HBase提供了高性能的关系型数据库查询能力。在大数据领域,HBase因其分布式、列式存储的特性,常被...
赠送jar包:phoenix-core-4.7.0-HBase-1.1.jar; 赠送原API文档:phoenix-core-4.7.0-HBase-1.1-javadoc.jar; 赠送源代码:phoenix-core-4.7.0-HBase-1.1-sources.jar; 赠送Maven依赖信息文件:phoenix-core-4.7.0...
赠送jar包:hbase-hadoop-compat-1.1.3.jar; 赠送原API文档:hbase-hadoop-compat-1.1.3-javadoc.jar; 赠送源代码:hbase-hadoop-compat-1.1.3-sources.jar; 赠送Maven依赖信息文件:hbase-hadoop-compat-1.1.3....
赠送jar包:hbase-prefix-tree-1.1.3.jar; 赠送原API文档:hbase-prefix-tree-1.1.3-javadoc.jar; 赠送源代码:hbase-prefix-tree-1.1.3-sources.jar; 赠送Maven依赖信息文件:hbase-prefix-tree-1.1.3.pom; ...
phoenix-4.14.1-HBase-1.2-client.jar
标题中的“hbase-1.1.2-bin.tar.gz”指的是HBase 1.1.2版本的二进制发行包,通常以压缩格式提供,方便用户下载并在Linux或Unix环境中安装使用。 HBase的设计灵感来源于Google的Bigtable论文,它在Hadoop之上构建,...
赠送jar包:hbase-metrics-api-1.4.3.jar; 赠送原API文档:hbase-metrics-api-1.4.3-javadoc.jar; 赠送源代码:hbase-metrics-api-1.4.3-sources.jar; 赠送Maven依赖信息文件:hbase-metrics-api-1.4.3.pom; ...
"phoenix-5.0.0-HBase-2.0-client" 是一个针对Apache HBase数据库的Phoenix客户端库,主要用于通过SQL查询语句与HBase进行交互。这个版本的Phoenix客户端是为HBase 2.0版本设计和优化的,确保了与该版本HBase的兼容...