1、简介
1.数据模型
HBase数据模型与关系数据库模型有很大的区别。HBase的数据模型被组织为行(row)、列族(column family)、列(column)和单元格(cell)的层次结构,其中数据存储在表(table)中。
表由多个行组成,每行具有一个唯一的行键(row key)。行键的设计非常重要,它决定了数据在HBase中的存储和访问方式。行中的数据以列族的形式组织,列族可以理解为具有相似属性或语义的列的集合。每个列族中可以包含多个列,列由列名和时间戳组成。单元格是一个行、列、时间戳和数据值的组合,数据值可以是任意类型的字节数组。
2.数据存储 HBase将数据按照row key的字典顺序进行排序,并将数据按照region(即数据分片)进行分布存储。每个region由一个或多个HDFS文件组成,这些文件以HFile的格式进行存储,其中包含专门优化的索引结构如Bloom filter等。HBase支持水平扩展,可以通过添加更多的region服务器来增加存储容量和吞吐量。
3.数据访问 HBase提供了多种方式进行数据访问。使用行键可以快速检索和访问行级别的数据。列族和列的设计可以根据不同的应用场景进行优化。HBase支持按照时间戳范围进行数据查询,可以获取特定时间点或时间段内的数据。此外,HBase还支持使用过滤器(filter)对数据进行条件过滤、分页查询等操作。
2、术语
2.1、表(Table)
-
HBase中数据都是以表形式来组织的
-
HBase中的表由多个行组成
在HBase WebUI(http://hadoop102:16010)中可以查看到目前HBase中的表
2.2、行(row)
-
HBASE中的行由一个rowkey(行键)和一个或多个列组成,列的值与rowkey、列相关联
-
行在存储时按行键按字典顺序排序
-
行键的设计非常重要,尽量让相关的行存储在一起
-
例如:存储网站域。如行键是域,则应该将域名反转后存储(org.apache.www、org.apache.mail、org.apache.jira)。这样,所有Apache域都在表中存储在一起,而不是根据子域的第一个字母展开
2.3、列(Column)
-
HBASE中的列由列蔟(Column Family)和列限定符(Column Qualifier)组成
-
表示如下——列蔟名:列限定符名。例如:C1:USER_ID、C1:SEX
2.4、列蔟(Column Family)
出于性能原因,列蔟将一组列及其值组织在一起
每个列蔟都有一组存储属性,例如:
-
是否应该缓存在内存中
-
数据如何被压缩或行键如何编码等
表中的每一行都有相同的列蔟,但在列蔟中不存储任何内容
所有的列蔟的数据全
HBase官方建议所有的列蔟保持一样的列,并且将同一类的列放在一个列蔟中
2.5、列标识符(Column Qualifier)
-
列蔟中包含一个个的列限定符,这样可以为存储的数据提供索引
-
列蔟在创建表的时候是固定的,但列限定符是不作限制的
-
不同的行可能会存在不同的列标识符
2.6、单元格(Cell)
-
单元格是行、列系列和列限定符的组合
-
包含一个值和一个时间戳(表示该值的版本)
-
单元格中的内容是以二进制存储的
ROW | COLUMN+CELL |
---|---|
1250995 | column=C1:ADDRESS, timestamp=1588591604729, value=\xC9\xBD\xCE\xF7\xCA |
1250995 | column=C1:LATEST_DATE, timestamp=1588591604729, value=2019-03-28 |
1250995 | column=C1:NAME, timestamp=1588591604729, value=\xB7\xBD\xBA\xC6\xD0\xF9 |
1250995 | column=C1:NUM_CURRENT, timestamp=1588591604729, value=398.5 |
1250995 | column=C1:NUM_PREVIOUS, timestamp=1588591604729, value=379.5 |
1250995 | column=C1:NUM_USEAGE, timestamp=1588591604729, value=19 |
1250995 | column=C1:PAY_DATE, timestamp=1588591604729, value=2019-02-26 |
1250995 | column=C1:RECORD_DATE, timestamp=1588591604729, value=2019-02-11 |
1250995 | column=C1:SEX, timestamp=1588591604729, value=\xC5\xAE |
1250995 | column=C1:TOTAL_MONEY, timestamp=1588591604729, value=114 |