hbase查询解析

hbase查找流程图

hbase查询解析

流程说明

从zk获取meta地址

客户端查询一个数据,先根据zookeeper获取meta表所在的region信息,meta表里存着region的各种信息,但是他也是在region里的,会被一个regionserver管理,信息存放在节点meta-region-server中。

查找数据对应的regionserver

region表中存放着所有region的信息,key是由表名,起始行,时间,散列值组成的,column有server,serverstartcode,regioninfo。server中存放的是regionserver的ip和port。regioninfo中有表名,startkey,endkey。根据这些信息可以知道你查的数据的regionserver。

hbase支持三种查询,rowkey,rowkey范围,全表扫描。根据startkey和endkey。保证了rowkey和rowkey范围的需求,剩下的就是全表扫描了。

查询regionserver的地址

每个regionserver的数据是两部分组成的,一部分在内存中,称为memstore,查询memstore的过程叫做memstorescan。一部分存在文件中,称为storefile,查询storefile的过程教程storefilescan。

storefile的查询

hbase的文件存储格式如下

|data|meta|fileinfo|dataindex|metaindex|trailer|

trailer记录fileinfo,dataindex,metaindex的偏移量。根据trailer可以找到dataindex。dataindex存放的是data数据的偏移量。

data块的存储如下

|magic|key value|key value|key value|

这里的存储是按照key的字典顺序存的。

小结

hbase的查询是一个多级查找索引的过程,根据zk找meta,根据meta找regionserver。犹豫hbase lsm的数据结构,数据分散成两块,一部分在内存,一部分在文件。此时就分成了两部分查询任务,在文件查询的过程中,先读取trailer找到dataindex,根据dataindex再找到data模块的索引,然后根据data里rowkey排序的存储模式来定位数据。

相关推荐