zoukankan      html  css  js  c++  java
  • hbase实践之数据读取详解

    hbase基本存储组织结构与数据读取组织结构对比

    image

    image

    Segment是Hbase2.0的概念,MemStore由一个可写的Segment,以及一个或多个不可写的Segments构成。故hbase 1.*版本中的MemstoreScanner变成了SegmentScanner。

    对应关系表

    Hbase存储结构 Hbase Scanner体系
    Region RegionScanner
    Store StoreScanner
    Memstore SegmentScanner(memstore级别)
    Storefile StorefileScanner

    hbase scanner体系与hbase存储组织结构是一一对应的。

    hbase写入数据的特点

    1. flush 写磁盘时,不同ColumnFamily生成不同Hfile。
    2. 数据采用追加方式写入,在major compaction才发生数据删除或失效。数据的多个版本都会记录在hfile,数据删除也会生成一条记录,只是keytype标记为delete。

    数据读取过程详解

    数据真正的读取过程只发生在StorefileScanner,其他scanner只是帮助缩小查找范围,类似于多级索引体系。

    storefilescanner的读取抽象过程如图所示:
    image

    1. 组织priorityqueue: 将包含rowkey的hfile文件组织成一个最小堆。最小堆的第一个元素一般是Memstore,从SegmentScanner(MemstoreScanner)开始。
    2. 根据过滤条件:Rowkey、ColumnFamily、Column等,从当前Scanner依次读取cell(keyvalue)数据;
    3. 当前Scanner数据扫描结束,扫描下一个Scanner,当前Scanner放到堆尾。

    StoreFileScanner中的数据读取细节

    要想知道读取细节,首先需要了解HFile的结构:

    image

    数据根据索引Root Index Block、Leaf Index Block,定位DataBlock。在64k大小的DataBlock中,可以根据二分查找等算法,定位到数据。

    参考文献

  • 相关阅读:
    网络协议
    面向对象三大特性之多态
    面向对象三大特性之封装
    面向对象三大特性之继承
    python面向对象编程
    常用模块之configpaser与shutil
    XML模块
    Python模块之OS,subprocess
    Python日志(logging)模块,shelve,sys模块
    Linux 配置 Nginx
  • 原文地址:https://www.cnblogs.com/small-k/p/10017019.html
Copyright © 2011-2022 走看看