目录
1、根据rowkey定位到对应的RegionServer的目标region
3、过滤不满足条件的Scanner,即过滤不满足条件的HFile或者MemStore
4、每个Scanner(可能在MemStore也可能在HFile中)执行seek得到startKey
5、对所有的Scanner合并构建成最小堆,依次pop取出有小到大排列的KeyValue,
6、前五步相当于构建一个未过滤的迭代器,下一步就是执行next取出目标的KeyValue,执行过滤逻辑,过滤完返回给客户端
Scanner构造成最小堆并通过pop得到KeyValue集合流程:
一、流程概述
1、根据rowkey定位到对应的RegionServer的目标region
1.1、通过客户端缓存的rowkey和RegionServer的映射信息定位目标RS和region
1.2、客户端找不到的话从zk上的/hbase-root/meta-region-server节点获取保存HBase元数据表hbase:meta所在的RegionServer
1.3、客户端与保存元数据的RS通讯,查找rowkey对应的RS和region信息
2、构造三层Scanner Iterator体系,
RegionScanner、StoreScanner、MemStoreScanner和StoreFileScanner,实际通过MemStoreScanner和StoreFileScanner分别对MemStore和HFile进行数据的查找
3、过滤不满足条件的Scanner,即过滤不满足条件的HFile或者MemStore
通过TimeRange过滤、RowKey过滤、布隆过滤器过滤淘汰掉不必要搜索的数据文件或MemStore
4、每个Scanner(可能在MemStore也可能在HFile中)执行seek得到startKey
5、对所有的Scanner合并构建成最小堆,依次pop取出有小到大排列的KeyValue,
在取KeyValue数据的时候,按如下取数据
5.1、如果是从HFile取数据,先从HFile的Load-on-open部分记录的的根索引节点根据二分法定位到叶子索引Block节点,中间可能还需要通过二分法定位到一个中间索引块,再进一步定位叶子索引节点,最多3层索引结构
5.2、整体取数据流程:A:Root Index Block--》B:Intermediate Level Data Index Block--》C:Leaf Index Block--》D:Data Block
5.3、加载内存的IO操作:A打开HFile就加载的,不计,其他的B、C、D都是需要加载到内存的,共3次IO
5.4、在C-->D获取DataBlock的时候,可能通过两个方式获取数据:
5.4.1、【查找缓存】通过BlockCache查找是否有对应Block,有的话按指定偏移量和大小的数据直接返回,没有则去HDFS查找
5.4.2、【查找HDFS】HDFS查找目标Block的指定偏移量和大小的数据
5.4.2.1、NN根据索引提供的信息查找有哪些HDFSBlock
5.4.2.2、NN根据找到的HDFSBlock,找到对应的DataNode列表,数据块在HDFS中默认是3份副本,按本地最优原则返回目标DataNode给HBase
5.4.2.3、HBase与对应的DataNode通讯,读取目标偏移量和大小的数据返回
6、前五步相当于构建一个未过滤的迭代器,下一步就是执行next取出目标的KeyValue,执行过滤逻辑,过滤完返回给客户端
6.1、如果包含Deleted/DeleteColumn/DeleteFamily则跳到下一列
6.2、如果KeyValue的TimeStamp不在用户设定时间TimStamp范围内,则忽略
6.3、如果KeyValue不满足用户设置过滤条件,则忽略
6.4、如果KeyValue不满足用户所选版本,则忽略
二、关键节点串联
整体逻辑:
rowkey --》RegionServer(1到N个region)--》三层Scanner Iterator体系--》Scanner构造成最小堆并通过pop得到KeyValue集合--》KeyValue过滤逻辑--》目标数据集合
Scanner构造成最小堆并通过pop得到KeyValue集合流程:
Root Index Block--》Intermediate Level Data Index Block -》Leaf Index Block--》Data Block
HDFS获取HBase的目标DataBlock流程:
NN--》HDFSBlock列表--》DataNode列表--》多个目标DataNode(本地优先)--》HDFSBlock中包含目标偏移量和大小的数据
参考:https://blog.csdn.net/JacksonKing/article/details/107688783