Region 定位(1)

Region就是HBase架构的灵魂。


Client在读写的时候是怎么定位到RegionServer的???

三层查询架构

关于Region的查找,0.96.0版本之前是被称为三层查询架构

  • Region:就是要查找的数据所在的Region
  • .META.:是一张元数据表,它存储了所有Region的简要信息。.META.表中的一行记录就是一个Region,该行记录了该Region的起始行、结束行和该Region的连接信息,这样客户端就可以通过这个来判断需要的数据在哪个Region上。
  • -ROOT-:是一张存储.META.表的表。.META.可以有很多张,而-ROOT-就是存储了.META.表在什么Region上的信息(.META.表也是一张普通的表,也在Region上)。

通过两层的扩展最多可以支持2^{34}次幂个Region。即17179869184个,约等于171亿个Region。

通过查询ZooKeeper的/hbase/root-region-server节点来获取-ROOT-表所在的RegionServer。

所以Client查找数据的流程从宏观角度来看是这样的:

(1)用户通过查找zk(ZooKeeper)的/hbase/root-region-server节点来知道-ROOT-表在什么RegionServer上。
(2)访问-ROOT-表,看需要的数据在哪个.META.表上,这个.META.表在什么RegionServer上。
(3)访问.META.表来看你要查询的行键在什么Region范围里面。
(4)连接具体的数据所在的RegionServer,这回就真的开始用Scan来遍历row了。

总体流程如下图:

三层架构的弊端

(1)通过三层架构虽然极大地扩展了可以容纳的Region数量,一直扩展到了171亿个 Region,但是实际情况中是用不到这么多的region的。
(2)虽然设计上是允许多个.META.表存在的,但是实际上在HBase的发展历史中,.META.表一直只有一个,所以-ROOT-中的记录一直都只有一行,-ROOT-表形同虚设。
(3)三层架构增加了代码的复杂度,容易产生BUG。

二层查询架构

从0.96版本之后这个三层查询架构被改成了二层查询架构。-ROOT-表被去掉了,同时zk中的/hbase/root-region-server也被去掉了。直接把.META.表所在的RegionServer信息存储到了zk中的/hbase/meta-region-server节点。
再后来引入了namespace,.META.表这样别扭的名字被修改成了hbase:meta

二层查询架构如下图所示

(1)客户端先通过ZooKeeper的/hbase/meta-region-server节点查询到哪台RegionServer上有hbase:meta表。
(2)客户端连接含有hbase:meta表的RegionServer。hbase:meta表存储了所有Region的行键范围信息,通过这个表就可以查询出要存取的rowkey属于哪个Region的范围里面,以及这个Region又是属于哪个RegionServer。关于hbase:meta表的结构参见hbase:meta表结构
(3)获取这些信息后,客户端就可以直连其中一台拥有要存取的rowkey的RegionServer,并直接对其操作。
(4)客户端会把meta信息缓存起来,下次操作就不需要进行以上加载hbase:meta的步骤了。


《Hbase不睡觉书》笔记

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值