1. 程式人生 > >hbase實踐之資料讀取詳解

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中,可以根據二分查詢等演算法,定位到資料。

參考文獻