HBase的逻辑存储结构主要包括:命名空间(NameSpace)、表(Table)和列族(Column Family)。视频讲解如下:
https://www.bilibili.com/video/BV1T3BrYcE8a/?aid=113529894410...
下面分别进行介绍。
一、 命名空间(NameSpace)
HBase的命名空间相当于Oracle和MySQL中的数据库,它是对表的逻辑划分。不同的HBase命名空间类似于关系型数据库中的不同的数据库。利用命名空间的逻辑管理功能,可以实现在多租户场景下做到更好的资源和数据隔离。在系统表hbase:namespace中保存了的所有的命名空间信息。视频讲解如下:
https://www.bilibili.com/video/BV1nvBsY6EhX/?aid=113535631825...
通过下面的语句可以管理和操作HBase的命名空间。
(1)查询系统表hbase:namespace
> scan 'hbase:namespace'
# 输出的信息如下:
ROW COLUMN+CELL
default column=info:d, timestamp=1631601267690, value=\x0A\x07default
hbase column=info:d, timestamp=1631601267862, value=\x0A\x05hbase
2 row(s)
提示:这里可以看出在默认的情况下,HBase存在两个命名空间,即:default和hbase。如果没有指定命名空间,新表将创建在default命名空间下;而hbase命名空间是系统命名空间,一般不用于普通操作。
(2)查看命名空间也可以通过执行list_namespace命令,例如:
> list_namespace
# 输出的信息如下:
NAMESPACE
default
hbase
2 row(s)
(3)创建一个新的命名空间mydemo,并在mydemo命名空间中创建一张新表。
> create_namespace 'mydemo'
> create 'mydemo:table1','info'
(4)查看命名空间mydemo中的表。
> list_namespace_tables 'mydemo'
# 输出的信息如下:
TABLE
table1
1 row(s)
二、 表(Table)
HBase的表对应于关系型数据库中的一张表,HBase以表为单位组织数据,表由多行组成。每一行由一个RowKey和多个列族组成。Rowkey用于唯一标识一条记录。不同行的Rowkey可以重复,但相同的Rowkey表示同一条记录。为了加快查询数据的速度,HBase表中的所有行都按照RowKey的字典顺序进行排列。
视频讲解如下:
https://www.bilibili.com/video/BV1m5zKYNEQF/?aid=113543902928...
表在行的方向上分隔为多个Region,而Region是HBase中分布式存储和负载均衡的最小单元。因此在同一个Region Server上可能保存了不同的Region,但一个Region只会属于一个Region Server。Region按大小分隔,而表中每一行只能属于一个Region。随着数据不断插入表,会使得Region不断增大。当Region中的某个列族达到一个阈值时就会分成两个新的Region,分裂后每一个新的Region大小是原来Region的一半。
三、 列族(Column Family)
由于表中的一行上可能存在多个列族,因此Region可以被进一步地划分。每一个Region有一个或多个Store组成,HBase会把一起访问的数据放在一个Store里面,即一行上有几个列族,也就有几个Store。一个Store由一个MemStore和多个Store File组成。
视频讲解如下:
https://www.bilibili.com/video/BV15hz3YfEfX/?aid=113549019976...
列族中包含列,列不需要事先创建。当插入数据时没有该列,HBase会自动创建列;列又是由单元格组成。
提示:MemStore是HBase的写缓存,用于保存修改的数据。当MemStore的大小达到一个阀值时,HBase会有一个线程来将MemStore中的数据刷新到HBase的数据文件中生成一个快照。这个快照就是Store File。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。