HBase数据模型、RowKey、Column Family(列族)和qualifier(列)、Timestamp时间戳、Cell单元格、读写流程、HLog(WAL log)

HBase数据模型

HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的 HRegionServer上。

在 HDFS 上 HBase 每个表的目录下,会以 Region 划分并形成对应的目录

HRegion由一个或者多个Store组成,每个store保存一个columns family(列族)。
每个Strore又至少由一个memStore和0至多个StoreFile组成。如图:StoreFile以HFile格式保存在HDFS上。

RowKey

唯一标识一行数据

可以通过RowKey获取一行数据

按照字典顺序排序的。、

按照字典升序

Row key只能存储64k的字节数据 一般10-100byte

Column Family(列族)和qualifier(列)

HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。如 create ‘test’, ‘course’。

列名以列族作为前缀,每个“列族”都可以有多个列成员(column);如course:math, course:english, 新的列族成员(列)可以随后按需求动态加入。

权限控制、存储以及调优都是在列族层面进行的;

因为 HBase 是面向列族的

HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。

在 HDFS 上 HBase 的 目录结构

/hbase/data/namespace(命名空间,类似于库)/表名/Region/列族/HFile

Timestamp时间戳

在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。

时间戳的类型是 64位整型。

时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间

时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。

一般不会手动指定

Cell单元格

由行和列的坐标交叉决定。

单元格是有版本的。

单元格的内容是未解析的字节数组。

由{row key, column( = +), version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。

读写流程

HLog(WAL log)

HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和region名字外,同时还包括 sequence number和timestamp,timestamp是”写入时间”,sequence number的起始值为0,或者是最近一次存入文件系统中sequence number。

HLog SequeceFile的Value是HBase的KeyValue对象,即对应HFile中的KeyValue。

posted @ 2022-02-26 20:22  赤兔胭脂小吕布  阅读(1158)  评论(0编辑  收藏  举报