HBase中BlockCache的設(shè)計綜述

BlockCache用來做讀緩存,在每個RegionServer上只有一個BlockCache。BlockCache的默認值為0.4,它表示可用堆的40%。HBase提供了兩種不同的BlockCache實現(xiàn)來緩存從HDFS讀取的數(shù)據(jù):默認的堆上LruBlockCache和通常是堆外的BucketCache。
默認情況下,所有用戶表都啟用塊緩存,這意味著任何讀取操作都將加載LRU緩存。 這對于許多用例而言可能是好的,但是通常需要進行進一步的調(diào)整才能獲得更好的性能。 一個重要的概念是工作集大小或WSS,即:“計算任務(wù)所需的內(nèi)存量”。

BlockCache的分配

  • 一臺將堆大小設(shè)置為1 GB并且默認塊高速緩存大小的區(qū)域服務(wù)器將具有405 MB的塊高速緩存可用。
  • 20個區(qū)域服務(wù)器(堆大小設(shè)置為8 GB)和默認塊高速緩存大小將具有63.3的塊高速緩存。
  • 堆大小設(shè)置為24 GB,塊緩存大小為0.5的100個區(qū)域服務(wù)器將具有約1.16 TB的塊緩存。

LruBlockCache

使用Java實現(xiàn),并且完全在Java堆中。LruBlockCache的實現(xiàn)原理可以參照Java并發(fā)包的ConcurrentHashMap,管理BlockKey到Block的映射關(guān)系。LruBlockCache遵循LRU的淘汰策略。

LRUBlockCache提供了三中緩存策略。

  • 單一訪問優(yōu)先級:占讀緩存的25%,首次從HDFS加載塊時,數(shù)據(jù)將被存在這塊區(qū)域,它屬于三種策略中優(yōu)先級最低的。
    多路訪問優(yōu)先級:占讀緩存的50%,如果再次訪問先前優(yōu)先級組中的塊,則它將升級到該區(qū)域。
    內(nèi)存中訪問優(yōu)先級:占讀緩存的25%,如果該塊的系列被配置為“內(nèi)存中”,則無論其訪問次數(shù)如何,它都將存儲在此塊區(qū)域,一般用來存儲元數(shù)據(jù)信息和量小的數(shù)據(jù)。
    標(biāo)記一個列簇為內(nèi)存中訪問優(yōu)先級
HColumnDescriptor.setInMemory(true);

LRUBlockCache缺點是當(dāng)在緩存中的數(shù)據(jù)過長時間后,會被Java虛擬機從年輕代晉升到老年代,如果選擇是CMS虛擬機,將造成FullGC STW(stop-the-world)。

BucketCache

BucketCache也叫做Off-heap Block Cache,BucketCache屬于堆外緩存,它沒有使用JVM內(nèi)存管理算法來管理緩存,而是自己對內(nèi)存進行管理,以此來避免出現(xiàn)FullGC的問題,因為BucketCache設(shè)計較為復(fù)雜,這里不再展開說明,具體細節(jié)參照官方文檔。

一般來說HBase將BucketCache和LRUBlockCache搭配使用,稱為CombinedBlock-Cache。和DoubleBlockCache不同,系統(tǒng)在LRUBlockCache中主要存儲Index Block和Bloom Block,而將Data Block存儲在BucketCache中。因此一次隨機讀需要先在LRUBlockCache中查到對應(yīng)的Index Block,然后再到BucketCache查找對應(yīng)Data Block。

壓縮BlockCache

HBASE-11331引入了惰性BlockCache解壓縮,簡稱為compressed BlockCache。 啟用壓縮的BlockCache后,數(shù)據(jù)和編碼的數(shù)據(jù)塊將以其磁盤上的格式緩存在BlockCache中,而不是在緩存之前進行解壓縮和解密。

對于承載超出緩存容量的更多數(shù)據(jù)的RegionServer,已證明通過SNAPPY壓縮啟用此功能可將吞吐量提高50%,平均延遲提高30%,同時將垃圾收集增加80%,并將總CPU負載增加2%。 有關(guān)如何衡量和實現(xiàn)性能的更多詳細信息,請參見HBASE-11331。 如果BlockCache內(nèi)存比較充足或者當(dāng)前的數(shù)據(jù)任務(wù)對于CPU和垃圾負載是相當(dāng)敏感的,壓縮BlockCache可能并不是很適合。

默認情況下,壓縮的BlockCache是??禁用的。 要啟用它,在所有RegionServer上的hbase-site.xml中將hbase.block.data.cachecompressed設(shè)置為true。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容