HBase BlockCache讀緩存和讀路徑

和其他數據庫一樣,優化IO也是HBase提升性能的不二法寶,而提供緩存更是優化的重中之重。

根據二八法則,80%的業務請求都集中在20%的熱點數據上,因此將這部分數據緩存起就可以極大地提升系統性能。


一、HBase中緩存結構

HBase在實現中提供了兩種緩存結構:MemStore和BlockCache。其中MemStore稱為寫緩存,HBase執行寫操作首先會將數據寫入MemStore,並順序寫入HLog,等滿足一定條件後統一將MemStore中數據刷新到磁盤,這種設計可以極大地提升HBase的寫性能。不僅如此,MemStore對於讀性能也至關重要,假如沒有MemStore,讀取剛寫入的數據就需要從文件中通過IO查找,這種代價顯然是昂貴的!BlockCache稱為讀緩存,HBase會將一次文件查找的Block塊緩存到Cache中,以便後續同一請求或者鄰近數據查找請求,可以直接從內存中獲取,避免昂貴的IO操作。

HBase BlockCache讀緩存和讀路徑

使用 Scan API 掃描的時候,建議關閉 BlockCache,Scan 的場景中緩存意義不大。

HBase 讀取數據的時候優先查找 MemStore(最新的更新版本),其次會查找 BlockCache。首先了解一下 HBase Block 的概念。


二、HBase Block

在 HBase 中,存儲文件被劃分成若干個小存儲塊,默認是64k。在 get 或 scan 中一次會完全加載一個 block 到內存中。不同於 HDFS Block,HDFS 層面的塊是用於拆分大文件以提供分佈式存儲,HBase Block 塊存在於 HFile 的內部的數據結構。

HBase BlockCache讀緩存和讀路徑

在建表語句中可以通過參數BlockSize指定:BLOCKSIZE => '65536'

HBase BlockCache讀緩存和讀路徑


三、HBase BlockCache

BlockCache是Region Server級別的,一個Region Server只有一個Block Cache,在Region Server啟動的時候完成Block Cache的初始化工作。

HBase BlockCache讀緩存和讀路徑

HBase 提供了幾種 BlockCache 方案:

  • LruBlockCache
  • SlabCache,HBASE-4027 0.92版本提供,在1.0版本後被廢棄 HBASE-11307
  • BucketCache,HBASE-7404 0.95版本提供
  • ExternalBlockCache,HBASE-13170 1.10版本提供
HBase BlockCache讀緩存和讀路徑


四、HBase 讀路徑

HBase 讀路徑為,首先檢查 MemStore,然後檢查 BlockCache,最後檢索 HFile,並且合併一條數據的信息(read merge)返回給客戶端。

HBase BlockCache讀緩存和讀路徑


分享到:


相關文章: