`
flyingdutchman
  • 浏览: 353360 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多
    每个region都保存着一个HTable表的一个rowkey区间的数据,而每个HRegion Server都维护着HMaster Server分配个它的一些regions(默认情况下10 - 1000个,每个region大小默认为256MB),那么客户端到底是怎么通过一个给定的rowkey就知道要匹配的数据是在哪个服务器上的哪个region上的呢?谜底就是,HBase通过提供了2个特殊的叫做-ROOT-和.META.的目录表(catalog table)来支持这一region查找的。
    Zookeeper中存储着-ROOT-和.META.表的位置。.META.表里保存的是HRegion标识符和HRegion Server服务器的映射,该表会随着数据的增长而变大,并且也会被分割;为了定位这些.META.region,HBase使用-ROOT-表来存储这些.META.表的位置信息,-ROOT-表不会被分割,整个HBase集群中只有唯一的一个。
    这两个目录表在结构上和普通的HTable表没什么区别,就是这两个表的用处特殊,而且是由系统维护其中的数据——Region的分布情况以及每个Region的详细信息。 
    -ROOT-表结构大致如下所示:

    由上图可以看到,-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上查询数据。整个流程如下图所示:

    客户端查询流程示意图
  • 大小: 35.4 KB
  • 大小: 125.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics