首页
学习
活动
专区
工具
TVP
发布

HBase高级用法之行键设计、高级模式、辅助索引、搜索集成、事务、布隆过滤器以及版本管理

点击蓝字关注我吧

【本文详细介绍了HBase高级用法之行键设计、高级模式、辅助索引、搜索集成、事务、布隆过滤器以及版本管理等内容,欢迎读者朋友们阅读、转发和收藏!】

1 基本概念

1.1 概念

HBASE 的高级用法包含了行键设计,高级模式,辅助索引,搜索集成,事务,布隆过滤器以及版本管理等。

1.2 行键设计

HBASE 有两种基本的键结构,行键和列键。两者都可以存储有意义的信息,这些信息有两类,一种是键本身存储的信息,一种是键的排列顺序。行键设计是指通过合理 Hbase 行键( rowkey) 设计实现快速的多条件查询,所采用的方法将所有要用于查询中的列经过一些处理后存储在 rowkey 中,查询时通过 rowkey 进行查询,提高 rowkey 的利用率,加快查询速度。行键( rowkey) 并不是简单的把所有要查询的列的值直接拼接起来,而是将各个列的数据转成整型( int) 数据来存储。之后实现两个自定义的比较器( comparator) :一个是相等比较器,用于实现类似于 SQL 的多条件精确查找功能。

select * from table where col1='a' and col2='b'

另一个是范围比较器,用于实现类似于 SQL 语句的范围查找功能:

select * from table where col3 > '10' and col4

当两个比较器配合使用再结合 hbase 的过滤器,以实现类似于下面这条 SQL 语句这样多条件的查询 :

select * from table where col1='a' and col2='b' and col3 > '10' and col41.3 辅助索引

由客户端管理索引:缺点比优点更多;

带索引的事务型 Hbase: ITHbase ( 个人认为要远离在原本就不成熟的 HBase 上的更不成熟的封装 ) ;

带索引的 Hbase: IHbase ( 个人认为要远离在原本就不成熟的 HBase 上的更不成熟的封装 ) ;

协处理器:用钩子维护索引。

1.4 搜索集成

用 HBase 存储数据,用 MapReduce 任务建立索引,索引使用 Lucene 或者 Solr 。并且 Lucene 的后台存储用 HBase 。

BuildTableIndex 类可以扫描整个表,并建立 Lucene 索引,存储在 HDFS 上。

HBasene: 直接在 HBase 内部建立搜索索引。

1.5 布隆过滤器

布隆过滤器可以减少 I/O 操作的层面,但是消耗很大的性能,默认不要用。

(1) 、 Bloom 过滤器原理:当一个元素被加入集合时,通过 K 个 散列函数 将这个元素映射成一个位 数组 中的 K 个点,把它们置为 1 。检索时,我们只要看看这些点是不是都是 1 就(大约)知道集合中有没有它了:如果这些点有任何一个 0 ,则被检元素一定不在;如果都是 1 ,则被检元素很可能在。这就是布隆过滤器的基本思想。

优点:相比于其它的 数据结构 ,布隆过滤器在空间和时间方面都有巨大的优势。布隆过滤器存储空间和插入 / 查询时间都是常数( o(k) )。另外 , 散列函数相互之间没有关系,方便由硬件并行实现。布隆过滤器不需要存储元素本身,在某些对保密要求非常严格的场合有优势。

缺点:有一定的误识别率和删除困难。

(2) 、在 HBase 中使用:用户可以快速判断一个文件是否包含特定的行健。如果 Bloon 过滤器检测文件后,答复说不包含,则肯定不包含;如果包含 Bloom 过滤器答复说包含,则有可能有错,文件可能包含也可能不包含,默认是 1% 的误判率,因此可能有 1% 的多余文件块被加载。这样减少不必要的块加载量,减少 IO ,提升整个集群的吞吐率。

(3) 、一般使用行级 Bloom 过滤器,行级不行才使用行加列级。

1.6 版本管理

(1) 、如果集群的服务器时间不一致,有一台服务器 A 超前 1 小时,用户将一个值存储在 A 并使用隐式的时间戳。10 分钟后这个 region 被拆分,用户一半的数据更新被移到另一个服务器上。5 分钟后,当用户再向同样的列插入一个新的值,服务器会自动添加时间戳,此时新值会被以前的数据更老,从而造成错误。

(2) 、若默认配置保留 3 个版本,向同一个列插入 10 次值,则 Get 所有版本时候,只能得到最新的 3 个值。但是删除最后两个版本之后,老版本的数据还可能 Get 到,引起 ” 复活 “ 现象。直到 Major 合并之后,老版本会被永久删除,再也拿不到。

(3) 、删除标记:删除的本质是添加一个带有特定时间戳的墓碑标记到存储中。

我知道你在看

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200609A0MO7X00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券