整体过程是:
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的。