1. HBase的写入流程
- client通过zk, 找到对应的hregionServer
- 数据会先写入到hlog和memStore中
- memStore满了后,会flush到一个StoreFile.
- storeFile达到一定阀值(比如64M), 触发compact,会合并成一个大的storeFile, 同时进行版本合并和数据删除
- 多个storeFile合并成一个StroeFile, 当这个StroeFile达到一定阀值(比如256M),会触发split操作, 切分为两个storeFile.
- split操作相当于把HRegion切分为两个HRegion, 旧的hregion下线, 新的storeFile分配到这两个hregion中, hmaster又把这两个hregion分配到相应的hregisonServer上(有了20G的两个hregison)
2. -root-表、.meta表
HBase中的数据当做一本书,数有大目录,详细目录
大目录就是-root-,大目录的地址存放在zk中
小目录就是.meta,小目录的地址存在-root-(大目录中)
HBase中有两张特殊的表,-root-和.meta(元数据表)
- -root-(书的大目录):记录**.meta表的HRegion信息,-root-本身只有一个HRegion**
- .meta(书的小目录):记录HBase存储数据的表的HRegion信息,.meta本身可以有多个HRegion,HRegion在哪儿,记录在-root-表中
- zookeeper中记录了**-root-的HRegion信息**
3. HBase查询路由
- 访问zookeeper
- 通过zookeeper存储的-root-的location(书在哪儿), 找到-root-表, 找到了大目录
- 通过大目录, 找到.meta(小目录, 也就是表的详细元数据信息)
- 通过小目录, 就能具体找到数据的位置了.
如果喜欢本文章,请用小手点个赞~