概念
如上图:
- HMaster管理多个HRegionServer
- 一个RegionServer存在多个HRgion
- 一个HRegion有一个预写日志和多个store
- 一个store存在一个memoryStore和多个StoreFile
- StoreFile是HFile的逻辑实现,其实就是一个东西
写入流程:
- 首先客户端配置zookeeper的地址,然后去zookeeper获取元数据表存放的位置
- 然后找到具体的regionserver的地址与对应的表
- 向内存中写入数据,到此对于客户端就结束了,所以hbase的写入速度很快
- 当内存中的数据到达一定的阈值时触发flush机制,保存为storeFile
- 当storeFile的某一个大小超过一定的阈值或者总的容量到达一定阈值时会触发compact
- 当region的容量达到一定的阈值后会分裂一个新的region
注:compact 分为两次合并,小合并只是合并部分HFile,并标记一些过期与删除的文件,并不会真的删除
大合并是合并所有的文件,物理删除
寻址过程
上面提高通过zookeeper找到元数据
我一直以为是保存了元数据,其实只是元数据表的位置
在低版本中:
-
先zookeeper中找到root表的regionserver的地址,从这步完成就脱离zookeeper进入hbase了
-
然后到root表去找到meta表的位置,root表示meta表的索引表
-
最后再meta表中找到具体的表
寻找RegionServer
ZooKeeper–> -ROOT-(单Region)–> .META.–> 用户表
-ROOT-表
表包含.META.表所在的region列表,该表只会有一个Region;
Zookeeper中记录了-ROOT-表的location。
.META.表
表包含所有的用户空间region列表,以及RegionServer的服务器地址。
————————————————
版权声明:本文为优快云博主「Running_Tiger」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq_41455420/article/details/79546367
注意:
-
元数据客户端会缓存一份,如果失败了再去重新获取
-
元数据表对于hbase都是保存在内存中的