《HBase权威指南》一3.6 各种特性

简介:

本节书摘来异步社区《HBase权威指南》一书中的第3章,第3.6节,作者: 【美】Lars George 译者: 代志远 , 刘佳 , 蒋杰 责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。

3.6 各种特性

在深入介绍客户端可以利用的特性之前,让我们先介绍一下HBase和其客户端API提供的各种特性或功能。

3.6.1 HTable的实用方法

客户端API是由HTable类的实例提供的,用户可以用它来操作HBase表。除了之前提到过的一些主要特性外,还有以下一些值得注意的方法。

void close()

这个方法之前提到过,不过为了它的完整性和重要性,我们在这儿要重新讨论一下。用户使用完一个HTable实例之后,需要调用一次close()。这个方法会刷写所有客户端缓冲的写操作:close()方法会隐式调用flushCache()方法。

byte[] getTableName()

这是一个获取表名称的快捷方法。

Configuration getConfiguration()

这个方法允许用户访问HTable实例中使用的配置。因为得到的是Configuration实例的引用,所以用户修改的参数(针对客户端的)都会立即生效。

HTableDescriptor getTableDescriptor()

这个方法会在5.1.1节进行详细介绍,每个表都使用一个HTableDescriptor实例来定义自己的表结构。用户可以使用这个方法访问这个表的底层结构定义。

static boolean isTableEnabled(table)

HTable类有4个不同的静态辅助方法,它们都需要一个显式的配置和一个表名。如果没有提供显式的配置,方法会找到classpath下的配置文件,使用默认值创建一个隐式的配置。这个方法可以检查表在ZooKeeper中是否被标志为启用。

byte[][] getStartKeys()
byte[][] getEndKeys()
Pair< byte[][], byte[][]> getStartEndKeys()

这些方法让用户可以查看当前表的物理分布情况,不过这个分布很可能在添加一些数据之后发生变化。这些方法返回了表的所有region的起始行键或/和终止行键。它们以二维字节数组形式返回,用户可以使用Bytes.toStringBinary()方法打印这些键。

void clearRegionCache()
HRegionLocation getRegionLocation(row)
Map< HRegionInfo, HServerAddress> getRegionsInfo()

这些方法可以帮助用户获取某一行数据的具体位置信息,或者说这行数据所在的region信息,以及所有region的分布信息。用户也可以在必要的时候清空缓存的region位置信息。这些方法可以让高级用户了解并使用这些信息,例如,控制集群流量或者调整数据的位置。

void prewarmRegionCache(Map< HRegionInfo, HServerAddress> regionMap)
static void setRegionCachePrefetch(table, enable)
static boolean getRegionCachePrefetch(table)

这又是一组高级方法。在1.4.5节提到过,可以先预取region位置信息来避免耗时较多的操作(查找每行数据所属region地址直到本地region地址缓存相对稳定)。使用这些方法,用户可以先获取一个region的信息表来预热一下region缓存(例如,用户可以使用getRegionsInfo()访问这个region的信息表,然后再处理它),也可以把整张表的预取功能打开。

3.6.2 Bytes类

前面介绍过,如何使用这个类转化Java的数据类型,例如,将String或long转化为HBase原生支持的原始字节数组。关于这个类和它的功能还有一些值得一提。

大部分方法都有3种形式,例如:

static long toLong(byte[] bytes)
static long toLong(byte[] bytes,int offset)
static long toLong(byte[] bytes,int offset,int length)

用户可以输入一个字节数组,或者一个字节数组再加一个偏移值,或者一个字节数组、一个偏移值和一个长度值。具体使用哪一种方法取决于最初这个字节数组是怎么生成的。如果这个字节数组之前是由toBytes()方法生成的,用户就可以安全地使用第一种形式的方法将其转化回来,只需送入这个字节数组而不需要其他额外信息。整个数组的内容都是转换过来的值。

不过,API和HBase内部都把数据存储为一个较大的数组,例如,使用下面的方法:

static int putLong(byte[] bytes,int offset,long val)

这个方法允许用户把一个long值写入一个字节数组的特定偏移位置。用户可以使用后面的两种toLong()方法存取这种较大的字节数组的数据。

Bytes类支持以下原生Java类型到字节数组的互转:String、boolean、short、int、long、double和float。除了之前介绍的方法外,还有一些值得一提的方法列举在表3-10中。


b10


完整的文档请参阅基于JavaDoc的API文档⑨。

①region服务器采用了一种多版本并发控制机制,具体实现在ReadWriteConsistencyControl(简称为RWCC)类中。这种机制保证了读程序读取数据时可以不用等待写程序完成写操作。写程序则需要等待其他写程序完成写操作之后才能继续执行。

②全局唯一标识符(Universally Unique Identifier)细节请参阅http://en.wikipedia.org/wiki/Universally_unique_identifier

③见维基百科的“Unix time”(http://en.wikipedia.org/wiki/Unix_epoch)。

④完整的描述请参阅API文档中KeyValue类的介绍(http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/KeyValue.html)。

⑤参见维基百科的“Remote procedure call”(http://en.wikipedia.org/wiki/Remote_procedure_call)。

⑥为了方便阅读,相关细节被分为多组,组之间用空行隔开。

⑦见链接http://en.wikipedia.org/wiki/Multiversion_concurrency_control

⑧扫描操作与不可回滚的游标操作相似。用户需要先声明,然后打开,并获取数据,最后关闭数据库游标。不过扫描操作没有声明这一步,否则扫描操作和游标操作的使用方法就是一样的了。参见维基百科中的Cursors。

⑨参阅在线文档Bytes一节(http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/util/Bytes/html)。

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
分布式数据库 Hbase
《阿里云HBase产品体系架构及特性解析》电子版地址
阿里云HBase产品体系架构及特性解析
120 0
《阿里云HBase产品体系架构及特性解析》电子版地址
|
存储 测试技术 分布式数据库
技术篇-HBase 2.0 新特性之 In-Memory Compaction
In-Memory Compaction 是 HBase2.0 中的重要特性之一,通过在内存中引入 LSM 结构,减少多余数据,实现降低 flush 频率和减小写放大的效果。本文根据 HBase2.0 中相关代码以及社区的讨论、博客,介绍 In-Memory Compaction 的使用和实现原理。
4991 0
|
存储 物联网 分布式数据库
阿里云HBase发布冷存储特性,助你不改代码,1/3成本轻松搞定冷数据处理
9月27日,阿里云HBase发布了冷存储特性。用户可以在购买云HBase实例时选择冷存储作为一个附加的存储空间,并通过建表语句指定将冷数据存放在冷存储介质上面,从而降低存储成本。冷存储的存储成本仅为高效云盘的1/3,适用于数据归档、访问频率较低的历史数据等各种场景。
3367 0
|
Java 分布式数据库 Hbase
HBase 3.0 可能的新特性
经过了四年的发展历程,HBase 2.0终于发布上线,其增加了很多的新特性,能够更好地适应更多的场景,但是也有一些原本计划的特性并没有随之上线。在未来的HBase 3.0版本中,又有哪些特性能够增加进来呢?本文中,技术大牛将论道HBase 3.0那些可能的新特性。
3281 0
|
Java 分布式数据库 Hbase
技术大牛论道HBase 3.0 可能的新特性
经过了四年的发展历程,HBase 2.0终于发布上线,其增加了很多的新特性,能够更好地适应更多的场景,但是也有一些原本计划的特性并没有随之上线。在未来的HBase 3.0版本中,又有哪些特性能够增加进来呢?本文中,技术大牛将论道HBase 3.0那些可能的新特性。
2360 0
|
存储 分布式数据库 索引
HBase2.0新特性之In-Memory Compaction
In-Memory Compaction是HBase2.0中的重要特性之一,通过在内存中引入LSM结构,减少多余数据,实现降低flush频率和减小写放大的效果。本文根据HBase2.0中相关代码以及社区的讨论、博客,介绍In-Memory Compaction的使用和实现原理。
4981 0
|
存储 物联网 大数据
阿里云HBase产品体系架构及特性解析
2017云栖大会HBase专场,阿里云高级技术专家封神带来阿里云HBase产品体系架构及特性解析。本文主要从HBase在大数据中的价值谈起,进而介绍了产品架构和产品特性,接着分享了应用场景和后续计划。
4929 0
|
存储 大数据 分布式数据库
《HBase权威指南》一导读
你阅读本书的理由可能有很多。可能是因为听说了Hadoop,并了解到它能够在合理的时间范围内处理PB级的数据,在研读Hadoop的过程中发现了一个处理随机读写的系统,它叫做HBase。或者将其称为目前流行的一种新的数据存储架构,传统数据库解决大数据问题时成本更高,更适合的技术范围是NoSQL。
2503 0