hbase實踐之資料讀取詳解
阿新 • • 發佈:2018-11-25
hbase基本儲存組織結構與資料讀取組織結構對比
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寫入資料的特點
- flush 寫磁碟時,不同ColumnFamily生成不同Hfile。
- 資料採用追加方式寫入,在major compaction才發生資料刪除或失效。資料的多個版本都會記錄在hfile,資料刪除也會生成一條記錄,只是keytype標記為delete。
資料讀取過程詳解
資料真正的讀取過程只發生在StorefileScanner,其他scanner只是幫助縮小查詢範圍,類似於多級索引體系。
storefilescanner的讀取抽象過程如圖所示:
- 組織priorityqueue: 將包含rowkey的hfile檔案組織成一個最小堆。最小堆的第一個元素一般是Memstore,從SegmentScanner(MemstoreScanner)開始。
- 根據過濾條件:Rowkey、ColumnFamily、Column等,從當前Scanner依次讀取cell(keyvalue)資料;
- 當前Scanner資料掃描結束,掃描下一個Scanner,當前Scanner放到堆尾。
StoreFileScanner中的資料讀取細節
要想知道讀取細節,首先需要了解HFile的結構:
資料根據索引Root Index Block、Leaf Index Block,定位DataBlock。在64k大小的DataBlock中,可以根據二分查詢等演算法,定位到資料。