HBase的读写机制

HBase写数据流程

1、Client先访问zookeeper,从meta表获取相应region信息,然后找到meta表的数据

2、根据namespace、表名和rowkey根据meta表的数据找到写入数据对应的region信息

3、找到对应的regionserver

4、把数据分别写到HLog和MemStore上一份

5、MemStore达到一个阈值后则把数据刷成一个StoreFile文件。(若MemStore中的数据有丢失,则可以总HLog上恢复)

6、 当多个StoreFile文件达到一定的大小后,会触发Compact合并操作,合并为一个StoreFile,(这里同时进行版本的合并和数据删除。)

7、 当Storefile大小超过一定阈值后,会把当前的Region分割为两个(Split),这里相当于把一个大的region分割成两个region,并由Hmaster分配到相应的HRegionServer,实现负载均衡。

 

HBase读取数据流程

1、Client先访问zookeeper,从zookeeper中找到meta表region的位置,然后读取meta表中的数据。meta中又存储了用户表的region信息。

2、根据namespace、表名和rowkey在meta表中找到对应的region信息

3、找到这个region对应的regionserver

4、查找对应的region

5、先从MemStore找数据,如果没有,再到StoreFile上读(为了读取的效率)

 

问题扩展

hbase 使用 MemStore 和 StoreFile 存储对表的更新。

数据在更新时首先写入 Log(WAL log)和内存(MemStore)中,MemStore 中的数据

是排序的,当 MemStore 累计到一定阈值时,就会创建一个新的 MemStore,并且

将老的 MemStore 添加到 flush 队列,由单独的线程 flush 到磁盘上,成为一个

StoreFile。于此同时,系统会在 zookeeper 中记录一个 redo point,表示这个

时刻之前的变更已经持久化了。

当系统出现意外时,可能导致内存(MemStore)中的数据丢失,此时使用 Log(WAL

log)来恢复 checkpoint 之后的数据。

StoreFile 是只读的,一旦创建后就不可以再修改。因此 Hbase 的更新其实是不断追加的操作。当一个 Store 中的 StoreFile 达到一定的阈值后,就会进行一次合并(minor_compact,major_compact),将对同一个key的修改合并到一起,形成一个大的StoreFile,当StoreFile的大小达到一定阈值后,又会对 StoreFile 进行 split,等分为两个 StoreFile。由于对表的更新是不断追加的,compact 时,需要访问 Store 中全部的 StoreFile 和MemStore,将他们按 row key 进行合并,由于 StoreFile 和 MemStore 都是经过排序的,并且 StoreFile 带有内存中索引,合并的过程还是比较快。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据架构师Pony

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值