简 介:HBase是谷歌BigData论文的一个代码实现,在大数据处理领域应用广泛。本文意在记录自己近期学习过程中的所学所得,如有错误,欢迎大家指正。
关键词:大数据组件、HBase、NoSQL
一、HBase读数据流程
HBase读数据流程:
- 首先从zookeeper中获得meta表所在的RegionServer
- 然后从meta表中获取待查询的表的Region所在的RegionServer,将查询到的信息放到Meta Cache缓存中,便于后续查找
- 与查询到的RegionServer进行通信
- 从该RegionServer中的MemStore和StoreFile(内存和磁盘)分别进行读取数据
- 将从内存和磁盘读取到的数据进行合并,什么是合并就是有可能内存和磁盘中的数据是两个版本,或者可能同样类型的数据然后时间戳不一样,需要将两个地方读取到的数据进行对比,返回最新时间戳的数据
- 然后将合并后的数据缓存到Block Cache,以便于后续查询
- 将合并后的数据返回给客户端
1.我们测试一下,首先创建一个stu表:
2.然后向stu表中插入一条数据
我们发现此时HDFS中的info列族中还没有数据,是因为此时数据还在内存中,没有被刷写,我们可以进行手动刷写
3.将插入的数据进行刷写
发现手动刷写后就可以在HDFS中发现了数据,就是将MemStore中的数据刷写成StoreFile
4.再插入一条时间戳小于刚才的数据
插入之前先扫描一下刚才插入的时间戳
然后进行插入一条时间戳小的数据
那么现在张三对应的数据此时在磁盘中,而新插入的李四仍在内存中,按照常理想,我们会认为进行读取内存,也就是会读到李四
也就是会读到李四
[外链图片转存中…(img-JVVIIENC-1624367770630)]
但是发现现在扫描仍然是张三,这就说明默认读取的不是内存,真正的读取就是将内存和磁盘中的数据都进行读取,然后进行时间戳比较,返回最新的时间戳数据,而不是读取内存中的,然后将读取到的进行合并返回给客户端,然后将该数据同时存储到Block Cache中,方便后续的查找。