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

《Hbase权威指南》深入学习hbase架构(9):rowkey查询的“奇幻漂流”

阅读更多
    在《分区查找》这一章中我们已经学习了Region Lookups的详细内容;那么,对于一个给定的rowkey,客户端是如何去查询这个rowkey的信息的——可能有匹配信息也可能没有,是每次都去做如《分区查找》这边文章中说的那样,每次都去做三次查询吗?如果答案为否,那么客户端是如今和处理的?
    实际上,hbase的查询流程是这样的:

    1、客户端会首先查询客户端缓存,如果其中缓存有的-ROOT-和.META.的信息,则可以由这些缓存定位到保存有给点rowkey区间的HRegion Server的地址,然后直接执行第4步,否则直接执行第2步;
    2、客户端到Zookeeper中获取-ROOT-表的地址;
    3、客户端从-ROOT-表中获取请求的rowkey所属的.META.region的位置;
    4、客户端从.META.表中查找到rowkey所在的region的HRegion Server位置;
    5、客户端最后直接连接rowkey所在的region的HRegion服务器,如果服务器上没有rowkey所属的region,这就说明缓存的数据有误(因为region做了分割,并且修改修改过.META.表),这种情况下会再次从第2-4步的过程,并将最新的数据信息缓存到客户端;否则执行第6步;
    6、客户端会先到内存中的memstore查询给定的rowkey,如果查到则直接将结果返回给客户端;
    7、如果在memstore中没有查到rowkey匹配的数据,那么接着读取服务器磁盘上storefile文件,在storefile中匹配该rowkey并将结果——可能查得到或查不到——返回给客户端。   
  • 大小: 83.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics