[本文2100字左右,预计阅读需要15-20分钟] 按照HBase数据存储流程,今天介绍一下HBase的数据读取流程, HBase的存储模型 及 数据写入流程 请自行查阅。 和数据写入流程相比,HBase的数据读取流程更加复杂。主要基于两方面原因:一是因为HBase一次范围查询可能涉及到多个Region、多块缓存甚至多个数据存储文件;二是因为HBase中更新操作以及删除操作的实现都很简单,更新操作并没有更新原有数据,而是使用时间戳属性实现了多版本;删除操作也并没有真正删除原有的数据,只是插入了一条标记为“deleted”标签的数据,而真正删除数据发生在系统异步执行Major Compact的时候。很显然,这种实现思路大大简化了数据更新、删除流程,但对数据读取设置了层层阻碍:读取过程需要根据版本进行过滤,对已经标记删除的数据也要进行过滤。读取流程从头到尾可以分为以下4个步骤:
Client-Server读取交互逻辑。
Server端Scan框架体系。
过滤淘汰不符合查询条件的HFile。
从HFile中读取待查找Key。
一
Client-Server读取交互逻辑
Client-Server的通用交互逻辑:Client首先从ZooKeeper中获取元数据hbase:meta表所在的RegionServer,然后根据带读写rowkey发送请求到元数据所在RegionServer,获取数据所在的目标RegionServer和Region(并将这部分元数据信息缓存到本地)