《Hbase权威指南》深入学习hbase架构(8):分区查找

每个region都保存着一个HTable表的一个rowkey区间的数据,而每个HRegion Server都维护着HMaster Server分配个它的一些regions(默认情况下10 - 1000个,每个region大小默认为256MB),那么客户端到底是怎么通过一个给定的rowkey就知道要匹配的数据是在哪个服务器上的哪个region上的呢?谜底就是,HBase通过提供了2个特殊的叫做-ROOT-和.META.的目录表(catalog table)来支持这一region查找的。
[b]Zookeeper中存储着-ROOT-和.META.表的位置。.META.表里保存的是HRegion标识符和HRegion Server服务器的映射,该表会随着数据的增长而变大,并且也会被分割;为了定位这些.META.region,HBase使用-ROOT-表来存储这些.META.表的位置信息,-ROOT-表不会被分割,整个HBase集群中只有唯一的一个。[/b]
这两个目录表在结构上和普通的HTable表没什么区别,就是这两个表的用处特殊,而且是由系统维护其中的数据——Region的分布情况以及每个Region的详细信息。
-ROOT-表结构大致如下所示:
[img]http://dl.iteye.com/upload/attachment/0083/0987/57f227f6-cbd3-3fd8-818b-6eab97a5070f.jpg[/img]
由上图可以看到,-ROOT-表中的每一行都记录而一个HTable的region和该region所在的HRegin Server的地址的信息;该表是唯一的,并且永远不会被分割,这保证了region查询是一个类似B+Tree的3级的查找模式:
1、第一级就是Client到Zookeeper中获取-ROOT-表的地址;
2、第二级就是Client从-ROOT-表中请求rowkey所属的.META.region的位置;
3、第三级就是Client从.META.表中查找到rowkey所在的region的HRegion Server位置。
在经过这三步操作后,我们就可定位到要查询的rowkey所在的HRegion Server,然后客户端直接连接这个HRegion服务器,在rowkey所属的region上查询数据。整个流程如下图所示:
[img]http://dl.iteye.com/upload/attachment/0083/1343/0e54c81b-5b58-3e07-b565-8d888eed2d11.jpg[/img]
[u]客户端查询流程示意图[/u]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值