[博学谷学习记录]超强总结,用心分享|HBase的读写数据的流程

HBase的读取数据的流程

读取数据的流程:

1) 客户端发起读取数据的请求, 首先会先连接zookeeper

2) 从zookeeper中获取一张 hbase:meta 表目前被哪个RegionSerer所管理

说明: hbase:meta 是HBase专门用于存储元数据的表, 此表只会有一个Region,也就是说这个Region只能被一个RegionServer所管理

3) 连接Meta表对应的RegionServer, 从这个表中获取, 要读取的表有哪些Region, 以及这些Region对应被哪些RegionServer所管理,从而确认要操作的RegionServer

注意:

如果执行Scan, 返回这个表所有Region对应的RegionServer的地址

如果执行get, 返回查询rowkey对应Region所在RegionServer的地址

4- 连接对应的RegionServer, 从RegionServer中对应Region中读取数据即可

读取顺序: 先内存 ---> blockCache(块缓存) ----> storeFile ---> 大HFile

注意: 读取块缓存只有在get操作才有效, 如果scan扫描 基本无意义

HBase的写入数据的流程

写入数据流程:

1- 由客户端发起写入数据的请求, 首先先连接zookeeper

2- 从zookeeper中获取hbase:meta表被那个RegionServer所管理

3- 连接对应RegionServer, 从Meta表获取要写入数据的表有哪些Region, 以及每个Region被那个RegionServer所管理, 然后根据Region的起始Rowkey 和 结束rowkey, 获取要写入数据的Region对应RegionServer的地址

大白话: 查询写入到那个Region, 这个Region被那个RegionServer所管理

4- 连接对应RegionServer, 开始进行数据写入操作, 写入时, 先将数据写入到这个RegionServer的HLog, 然后将数据写入到对应的Store模块下的MemStore中(可能写入多个MemStore), 当这两个位置都写入成功的时候, 客户端认为数据写入完成了

---------------以上 为客户端写入流程------------------------

异步操作: 上面客户端可能执行了多次后, 后续才会干活

5) 随着客户端不断的写入操作, MemStore中数据会越来越多, 当MemStore的数据达到一定的阈值(128M/1h)后, 就会启动flush刷新线程, 将内存中数据"最终"刷新到HDFS上, 形成一个StoreFile文件

6) 随着不断的进行Flush的刷新, 在HDFS上StoreFile文件会越来越多, 当StoreFlie文件达到一定的阈值(3个及以上)后,就会启动compact合并压缩机制, 将多个StoreFlie"最终"合并为一个大的HFile

7) 随着不断的合并, HFile文件会越来越大, 当这个大的HFile文件达到一定的阈值("最终"10GB)后,就会触发Split机制, 将大的HFile进行一分为二的操作, 形成两个新的大HFile文件, 此时Region也会进行一分为二,形成两个新的Region, 一个Region管理一个新的大Hfile, 旧的大HFile和对应Region就会被下线

# 博学谷IT 技术支持

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值