文章目录

  • ​​一、HBase读数据流程​​
  • ​​1.我们测试一下,首先创建一个stu表:​​
  • ​​2.然后向stu表中插入一条数据​​
  • ​​3.将插入的数据进行刷写​​
  • ​​4.再插入一条时间戳小于刚才的数据​​


【HBase】(5)-HBase读数据流程_python

 
简 介:HBase是谷歌BigData论文的一个代码实现,在大数据处理领域应用广泛。本文意在记录自己近期学习过程中的所学所得,如有错误,欢迎大家指正。
 
关键词:大数据组件、HBase、NoSQL

一、HBase读数据流程

【HBase】(5)-HBase读数据流程_数据库_02

HBase读数据流程:

  1. 首先从zookeeper中获得meta表所在的RegionServer
  2. 然后从meta表中获取待查询的表的Region所在的RegionServer,将查询到的信息放到Meta Cache缓存中,便于后续查找
  3. 与查询到的RegionServer进行通信
  4. 从该RegionServer中的MemStore和StoreFile(内存和磁盘)分别进行读取数据
  5. 将从内存和磁盘读取到的数据进行合并,什么是合并就是有可能内存和磁盘中的数据是两个版本,或者可能同样类型的数据然后时间戳不一样,需要将两个地方读取到的数据进行对比,返回最新时间戳的数据
  6. 然后将合并后的数据缓存到Block Cache,以便于后续查询
  7. 将合并后的数据返回给客户端

1.我们测试一下,首先创建一个stu表:

【HBase】(5)-HBase读数据流程_python_03

2.然后向stu表中插入一条数据

【HBase】(5)-HBase读数据流程_大数据_04

【HBase】(5)-HBase读数据流程_大数据_05

我们发现此时HDFS中的info列族中还没有数据,是因为此时数据还在内存中,没有被刷写,我们可以进行手动刷写

3.将插入的数据进行刷写

【HBase】(5)-HBase读数据流程_python_06

【HBase】(5)-HBase读数据流程_hbase_07

发现手动刷写后就可以在HDFS中发现了数据,就是将MemStore中的数据刷写成StoreFile

4.再插入一条时间戳小于刚才的数据

插入之前先扫描一下刚才插入的时间戳

【HBase】(5)-HBase读数据流程_数据库_08

然后进行插入一条时间戳小的数据

【HBase】(5)-HBase读数据流程_hbase_09

那么现在张三对应的数据此时在磁盘中,而新插入的李四仍在内存中,按照常理想,我们会认为进行读取内存,也就是会读到李四

【HBase】(5)-HBase读数据流程_python_10

也就是会读到李四

[外链图片转存中…(img-JVVIIENC-1624367770630)]

但是发现现在扫描仍然是张三,这就说明默认读取的不是内存,真正的读取就是将内存和磁盘中的数据都进行读取,然后进行时间戳比较,返回最新的时间戳数据,而不是读取内存中的,然后将读取到的进行合并返回给客户端,然后将该数据同时存储到Block Cache中,方便后续的查找。