HBase的写流程和读流程

1、HBase写流程

1.获取meta表的RootRegion位置信息
在客户端写进程时,第一次写时,Client先通过Zookeeper获取到Meta表对应的region位置信息,然后加入到进程缓存中,后续再读写时,直接读取缓存的meta信息对应的region信息就行.
2.找到数据要写在哪个region上
根据获取到的RootRegion位置信息,请求region所在的region server服务,根据namespace(相当于数据库名),表名和rowkey在meta表中找到写入数据对应的region信息.
找到最大的小于需要找的rowkey的那个rowkey对应的region,这个region就是目标region信息
3.发起实际的写入请求
向region对应的region server发起写入请求
4.WAL log写入
将插入/更新写入WAL中,当客户端发起put/delete请求时,考虑到写入内存会有丢失数据的风险,因此在写入缓存前,HBase会先写入到WAL中(WAL存储在HDFS上), 那么即使发生宕机,也可以通过WAL还原初始数据.
5.memstore写入与StoreFile落地
将更新写入memstore中,当这个内存达到预设的阈值,会触发flush memstore,把memstore中的数据写出到hdfs上,生成一个storefile.
6.StoreFile合并
随着Storefile文件的不断增多,当增长到一定阈值后,会触发compact合并操作,将多个storefile合并成一个,同时会删除旧版本.
store通过不断的compact合并,逐步形成更大的storefile
7.Region拆分
单个storefile大小超过阈值后,会触发split操作,把当前region拆分成两个,新拆分的2个region会被HMaster分配到相应的两个regionserver上,有可能是当前的regionserver,也有可能是别的.

2、HBase读流程

1.获取meta表的RootRegion位置信息
在客户端写进程时,第一次写时,Client先通过Zookeeper获取到Meta表对应的region位置信息,然后加入到进程缓存中,后续再读写时,直接读取缓存的meta信息对应的region信息就行.
2.找到数据要写在哪个region上
根据获取到的RootRegion位置信息,请求region所在的region server服务,根据namespace(相当于数据库名),表名和rowkey在meta表中找到写入数据对应的region信息.
找到最大的小于需要找的rowkey的那个rowkey对应的region,这个region就是目标region信息
3.发起实际的写入请求
向region对应的region server发起读取请求
4.先从memstore中查找数据,如果找到则返回
5.再从BlockCache查找数据,如果找到就返回
6. 再从StoreFile中查找数据,如果找到则返回,如果没有找到则返回null,
如果是从StoreFile中读取到的数据,则要写入BlockCache后再返回给客户端

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值