hbase数据模型
rowkey:相当于关系型数据库的主键,唯一的,代表一行数据,按照字典顺序排序,rowkey只能存储64k字节数据。
column family列族:一张表列簇不会超过5个,每个列簇中的列数没有限制。列在列簇中是有序的。
qualifier列:列只有插入数据后存在。
hbase表中某个qualifier列归属于某个列族,列族是作为表模式预先给出的。
每个列族都可以有多个列成员qualifier
hbase会把同一列族里面的数据存储在统一目录下,由几个文件保存。
timestamp时间戳,时间戳是用来区分cell的版本的,在hbase中,每个cell存储单元对对应多个版本,它们是根据时间戳来区分版本之间的差异,最新的数据版本排在最前面。
时间戳是由hbase在数据写入时自动赋值的,它精确到毫秒。
时间戳也可以由客户来赋值,但是此时需要注意的是唯一性。
cell单元格就是表的数据,单元格它是有版本的(timestamp时间戳中有介绍);单元格里面存储的是字节数组。
hlog(wal log)hlog文件是hadoop的序列文件(sequence file),sequencefile是存储二进制键/值数据的容器。里面存储的是key-value形式的数据。
sequence file的key对应的是hlogkey对象,hlogkey包含table、region名字、sequence number和timestamp。
hlog的value是hbase的keyvalue对象,即对应hfile中的keyvalue。
hbase读写流程
读流程
客户端先访问zookeeper(zookeeper里面储存着整个集群的元数据),从zookeeper获取元数据,从元数据(meta中存储着用户表的region信息)表读region的位置,接着读取meta表中的数据。然后根据namespace、表名和rowkey在元数据表中找到对应的region信息,找到这个region对应的regionserver并查找对应的region,接着再从memstore找数据,如果没有,就到storefile上读。
写流程
同样,client先访问zookeeper,从元数据表获取相应region信息,然后找到元数据表的数据,再根据namespace、表名和rowkey,从元数据表的数据找到写入数据对应的region信息并找到对应的regionserver,接着把数据分别写到hlog和memstore上各一份,当memstore达到一个阈值后会把数据flushcache到一个storefile文件。当多个storefile文件达到一定的大小后,会触发compact合并操作,合并为一个storefile,当storefile大小超过一定阈值后,会把当前的region分割为两个split,并由hmaster分配到相应的hregionserver,实现负载均衡。
喜欢就关注小编,小编天天写,你也可以进步一点点