hbase實踐之數據讀取詳解

hbase基本存儲組織結構與數據讀取組織結構對比

image

image

Segment是Hbase2.0的概念,MemStore由一個可寫的Segment,以及一個或多個不可寫的Segments構成。故hbase 1.*版本中的MemstoreScanner變成了SegmentScanner。算法

對應關係表sql

Hbase存儲結構 Hbase Scanner體系
Region RegionScanner
Store StoreScanner
Memstore SegmentScanner(memstore級別)
Storefile StorefileScanner

hbase scanner體系與hbase存儲組織結構是一一對應的。nosql

hbase寫入數據的特色

  1. flush 寫磁盤時,不一樣ColumnFamily生成不一樣Hfile。
  2. 數據採用追加方式寫入,在major compaction才發生數據刪除或失效。數據的多個版本都會記錄在hfile,數據刪除也會生成一條記錄,只是keytype標記爲delete。

數據讀取過程詳解

數據真正的讀取過程只發生在StorefileScanner,其餘scanner只是幫助縮小查找範圍,相似於多級索引體系。blog

storefilescanner的讀取抽象過程如圖所示:
image索引

  1. 組織priorityqueue: 將包含rowkey的hfile文件組織成一個最小堆。最小堆的第一個元素通常是Memstore,從SegmentScanner(MemstoreScanner)開始。
  2. 根據過濾條件:Rowkey、ColumnFamily、Column等,從當前Scanner依次讀取cell(keyvalue)數據;
  3. 當前Scanner數據掃描結束,掃描下一個Scanner,當前Scanner放到堆尾。

StoreFileScanner中的數據讀取細節

要想知道讀取細節,首先須要瞭解HFile的結構:get

image

數據根據索引Root Index Block、Leaf Index Block,定位DataBlock。在64k大小的DataBlock中,能夠根據二分查找等算法,定位到數據。it

參考文獻

相關文章
相關標籤/搜索