HBase是一种分布式的开源数据库,通常以表的形式对数据进行存储。HBase属于Hadoop集群,在Hadoop之上的作用也类似于Bigtable。作为Hadoop的一个子项目,HBase与一般的关系型数据库也有所不同,适用于进行结构化存储,为大数据处理以及MapReduce的运行提供支撑。HBase表由行和列族组成。列划分为若干个列族(row family)。
关于HBase有几个关键概念:
1、行键(RowKey)
行键是字节数组, 任何字符串都可以作为行键;表中的行根据行键进行排序,数据按照 Row key 的字节序(byte order)排序 存储;所有对表的访问都要通过行键(单个 RowKey 访问,或 RowKey 范围访问,或全表扫描)。
2、列族(ColumnFamily)
列族CF必须在表定义时给出,每个CF 可以有一个或多个列成员(ColumnQualifier),列成员不需要在表定义时给出,新的列族成员可以随后按需、动态加入。
数据按 CF 分开存储,HBase 所谓的列式存储就是根据 CF分开存储(每个 CF 对应一个Store),这种设计非常适合于数据分析的情形。
3、单元格(Cell)
Cell由行键,列族:限定符,时间戳唯一决定;Cell中的数据是没有类型的,全部以字节码形式存储。
4、时间戳(TimeStamp)
每个Cell可能有多个版本,它们之间用时间戳区分。
5、区域(Region)
HBase 自动把表水平(按 Row)划分成多个区域(region),每个 region 会保存一个表里面某段连续的数据;每个表一开始只有一个 region,随着数据不断插入表,region 不断增大,当增大到一个阀值的时候,region就会等分会两个新的region;当table 中的行不断增多,就会有越来越多的 region。这样一张完整的表被保存在多个 Region 上。
虽然Region是分布式存储的最小单元,但并非存储的最小单元。这一点各位要特别注意。尚学堂陈老师指出Region由 一个或者多个 Store组成,每个 store 保存一个 columns family;每个 Strore 又由一个 memStore 和 0 至多个 StoreFile 组成,StoreFile 包含HFile;memStore 存储在内存中,StoreFile 存储在 HDFS 上。
综上所述,关于HBase的数据模型可以从以上5点来加以理解。笔者建议,在初学HBase的过程中,多看官方的文档是非常重要的,而对数据模型的理解可以从实际应用中加深认识。
领取专属 10元无门槛券
私享最新 技术干货