HBase
作者:互联网
什么是HBase
1、HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。
2、逻辑上,HBase的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从HBase的底层物理存储结构(K-V)来看, HBase更像是一个mutil-dimensional map
3、如下图[1]所示,HBase有一列 “行键“ —— row key,row key是在建表时就要指定的,必须是唯一的(主键)。如果插入一条数据的row key列与表内重复,则会对表内该row key对应行进行更新;row key按字典序排列,所谓字典序指的是按位比较,如 row_key1<row_key11<row_key111<row_key2<row_key21<row_key3
每一行数据由一个行键来标识,我们在查询HBase中的数据时就是通过行键来定位的。一般的查询有三种方式,①根据行键查询,②根据行键范围查询,③全表扫描
4、如下图1[1]把HBase的存储结构分为逻辑结构和物理结构两个部分, Column Family指列簇,列簇包含一个或多个列,竖着切表得到列簇;列簇是Hbase元数据的一部分,在创建HBase表的时候不需要创建列因为它可以在表创建之后动态的添加。它不是元数据的一部分。创建表的时候必须指定列簇。就像关系型数据库创建的时候必须指定具体的列是一样的。
5、横着切表得到region,一个region由多行数据组成,如图2[2]。HBase将一个表从逻辑上横向切分成若干个HRegion,这些HRegion会分布在不同的机器上我们把这些机器称之为HRegionServer。我们也可以看到HRegion是实现HBase分布式与负载均衡的基础。
起初,一个表中只包含一个HRegion,所有的数据都放在一个HRegion中。但是随着数据量的积累,HRegion中的数据会越来越多,这时HRegion就会产生分裂。以此类推数据不断增大就会不断的分裂产生更多的HRegion。如下图所示:
- 一个HBase表包含着多个HRegion;
- 一个HRegion中包含着多个Store(Store的数量与表中列族的数量是一致的);
- 一个Store中又包含了两种组件:
memStore,这是一块基于内存的区域,一般情况下用户对数据的操作直接与memStore打交道(这也是为什么HBase效率高的原因);
storeFile,这时一块基于硬盘的区域,当memStore写数据溢出时就会开启一个新的memStore而旧的memStore会讲之前的数据写到一个storeFile中。而这只是逻辑上的结构,实务上所有的storeFile都会存到HDFS中,在HDFS中storeFile的名字会改名为HFile。
HBase最佳实践法则
HBase表的设计
当一个HBase表设计完成时是很难改变的,标设计的不好效率会大打折扣。我们通常需要考虑到的指标是行键与列族。
- 1、列族
- 在设计列族的时候要尽量将列族的数量减小,因为一个列族会对应一个Store而一个Store中就会至少开启一个memStore,如果数量太多就会过于耗费内存资源。官方推荐的是列簇最好小于或者等于3。一般是1个列簇 。
- 在设计列族的时候通常要将常常一起查的数据放在一起(让我想起了操作系统中的局部性原理),如果放到多个列族中当我们要查询这些数据的时候就会发生跨列族的查找。实务上我们通常只使用一个列族。
- 要避免列族数据倾斜(分配不均匀)的情况发生。首先我们需要明白一个事实就是Region的切割是横向进行的。所以当一个列族中的数据增长很快而另一个列族增长很慢时Region的分割主要是在依赖增长快的一方如下图所示。当这样进行几轮下去就会出现增长小的列族在对应的Region中的数据很少。这样我们在查询数据的时候就可能会发生跨Region的数据查询,这样的话会使得效率十分低下。
- 2、行键
行键在HBase中相当于索引所以他的设计也是非常考究的。实务上通常会遵循以下的规则:- 行键尽可能的有意义,可读性要强。
- 行键不宜过长,因为会占用大量计算机资源。
- 行键最好是字符串类型,这样可以轻易的适应各种平台。
- 长度最好保持一致,保证排序的一致性,(有时候10要比2小,对,就是要避免这种情况)。
- 行键必须唯一,它唯一标识一条数据。
[1] https://zhuanlan.zhihu.com/p/54184168
[2] https://blog.csdn.net/qq_32727095/article/details/108165315
[3] https://blog.csdn.net/qq_34993631/article/details/84640487
标签:HRegion,行键,列族,HBase,数据,row 来源: https://blog.csdn.net/qq_34565684/article/details/121865230