整体过程是:
1.client访问zk,查找-ROOT-表,获取.META.表信息
2.从.META.表查找,获取存放数据的region信息(找到region sever)
3.最后通过RegionServer获取查找的数据

不懂?别急,我们先了解ROOT表和META表的结构:
从这里可以看出,META表里面包含了region的信息(一行),region信息包括:region name(对应row_key),还有region sever(就是哪个sever管理这个region的)等信息
META存放了太多的region信息了,可能太大,会被分成多个region的,那么,META表的region怎么管理呢?就让ROOT表来管理吧,ROOT表也是同样的结构,只是管理的是META表的region信息而已。当然,ROOT表不可能会非常大的,不需要其它表来管理了,不然也不叫ROOT了,是吧。
一句话:META表管理的是实际创建的表的region信息,ROOT表管理的是META表的region信息,明白了吧?
到这里,先client--->root---->meta--->region sever这个顺序应该知道了吧。。
接下来看看什么是RegionServer
数据的读写操作,都是在RegionServer上操作的,RegionServer它一方面维护region的状态,提供对region的管理和服务(增删改查等),一方面跟Master交换,上传region的负载信息,参与Master的分布式协调管理(就是要负载均衡啦)。。。
ok,也就是说,最后查找还得是通过RegionServer来操作,到这里,client--->root---->meta--->region sever----->获取数据 整个流程就打通了。
其实,最后在查询数据的时候,会先查menstore,没有再查block cach,最后才查hfile的。
本文详细解释了HBase中数据查找的过程,从client开始,通过ZooKeeper找到-ROOT-表,进而获取.META.表信息,然后定位到RegionServer,最终在RegionServer上完成数据检索。还介绍了ROOT表和META表的层级管理结构,以及RegionServer在数据读写及负载均衡中的作用。

2万+

被折叠的 条评论
为什么被折叠?



