基本概念
- 命名空间(Name Spaces)
- HBase 中的命名空间是表的逻辑分组,类似 RDBMS 中的数据库实例
-
在 HBase 中有两个预定义的特殊命名空间:
-
hbase:系统命名空间,用于包含 HBase 内部表
-
default:没有显式指定命名空间的表将自动落入此命名空
-
- 表(Table)
- 表主要是可以把某些列组织起来一起访问
- 表名作为 HDFS 存储路径的一部分来使用,在 HDFS 中可以看到每个表名都作为独立的目录结构
- 行键(Row Key)
- 列族(Colunm Family)
- 列族是一些列的集合,必须在使用表之前进行定义,每个列必须归属于某个列族,列族的名字必须是可显示的字符串,列族中所有列成员的列名都以列族名字作为前缀,例如,info:name, info:age 都属于 info 这个列族
- 列标识(Column Qualifier)
- 通常以 Column Family:Colunm Qualifier 来确定列族中的某列
- 单元格(Cell)
- 每一个行键、列族、列标识共同确定一个单元格,最小单元格还需要加上时间戳。单元格的内容也没有特定的数据类型,以二进制字节来存储。最小单元格可以用以下元组方式来进行访问:<RowKey,Column Family:Column Qualifier,Timestamp>
- 时间戳(Timestamp)
模型
- 逻辑模型
学生成绩表 Performance有四行记录和两个列族
行键分别为 0001、0002、0003 和 0004
两个列族分别为 StudentInfo 和 Grades
每个列族中含有若干列
表存储在 Region 中,列族存放在 Store 中
- 物理模型
StudentInfo 这个列族中 RowKey 为 0001 的数据的实际物理存储方式,列族的数据会从内存写到 StoreFile 中
0001 的 StudentInfo:Address 存储了两个版本的数据,通过时间戳(Timestamp)区分开来,最新的数据放在前面,在没有指定的情况下默认读取此最新版本的数据(dataman_road 而非 alibaba)。通过加上时间戳指定可读取旧版本的数据:<0001,StudentInfo:Address,1638502591507>