布隆過濾器在HBase中的應(yīng)用

原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明原作地址:http://www.itdecent.cn/p/0858f9d6a6c2

在討論布隆過濾器在HBase中的應(yīng)用之前,先介紹一下HBase的塊索引機(jī)制。塊索引是HBase固有的一個(gè)特性,因?yàn)镠Base的底層數(shù)據(jù)是存儲(chǔ)在HFile中的,而每個(gè)HFile中存儲(chǔ)的是有序的<key, value>鍵值對(duì),HFile文件內(nèi)部由連續(xù)的塊組成[1],每個(gè)塊中存儲(chǔ)的第一行數(shù)據(jù)的行鍵組成了這個(gè)文件的塊索引,這些塊索引信息存儲(chǔ)在文件尾部。當(dāng)HBase打開一個(gè)HFile時(shí),塊索引信息會(huì)優(yōu)先加載到內(nèi)存;HBase首先在內(nèi)存的塊索引中進(jìn)行二分查找,確定可能包含給定鍵的塊,然后讀取磁盤塊找到實(shí)際想要的鍵。

但實(shí)際應(yīng)用中,僅僅只有塊索引滿足不了需求,這是因?yàn)?,塊索引能幫助我們更快地在一個(gè)文件中找到想要的數(shù)據(jù),但是我們可能依然需要掃描很多文件。而布隆過濾器就是為解決這個(gè)問題而生。因?yàn)椴悸∵^濾器的作用是,用戶可以立即判斷一個(gè)文件是否包含特定的行鍵,從而幫我們過濾掉一些不需要掃描的文件。如下圖所示,塊索引顯示每個(gè)文件中都可能包含對(duì)應(yīng)的行鍵,而布隆過濾器能幫我們跳過一些明顯不包含對(duì)應(yīng)行鍵的文件。

減少不必要的文件查找.png

如上圖所示,布隆過濾器不能明確指出哪一個(gè)文件一定包含所查找的行鍵,布隆過濾器的結(jié)果有誤差存在。當(dāng)布隆過濾器判斷文件中不包含對(duì)應(yīng)的行時(shí),這個(gè)答案是絕對(duì)正確的;但是,當(dāng)布隆過濾器判斷得到文件中包含對(duì)應(yīng)行時(shí),這個(gè)答案卻有可能是錯(cuò)的。也就是說,HBase還是有可能加載了不必要的塊。盡管如此,布隆過濾器還是可以幫助我們跳過一些明顯不需要掃描的文件。另外,錯(cuò)誤率可以通過調(diào)整布隆過濾器所占空間的大小來調(diào)整,通常設(shè)置錯(cuò)誤率為1%。

需要注意的是,使用布隆過濾器,并不一定能立即提升個(gè)別的get操作性能,因?yàn)橥粫r(shí)間可能有多個(gè)客戶端向HBase發(fā)送請(qǐng)求,當(dāng)負(fù)載過大時(shí),HBase的性能受限于讀磁盤的效率。但是,使用了布隆過濾器之后,可以減少不必要的塊加載,從而可以提高整個(gè)集群的吞吐率。并且,因?yàn)镠Base加載的塊數(shù)量少了,緩存波動(dòng)也降低了,進(jìn)而提高了讀緩存的命中率。

然而,相比與布隆過濾器的優(yōu)點(diǎn),它的缺點(diǎn)顯得如此微不足道,就是需要占用少量的存儲(chǔ)空間。

在使用布隆過濾器時(shí),需要注意兩個(gè)問題:

  1. 什么時(shí)候應(yīng)該使用布隆過濾器?根據(jù)上面的描述,布隆過濾器的主要作用,是幫助HBase跳過那些顯然不包括所查找數(shù)據(jù)的底層文件。那么,當(dāng)所查找的數(shù)據(jù)均勻分布在所有文件中(當(dāng)用戶定期更新所有行時(shí),就可能導(dǎo)致這種情況),布隆過濾器的作用就微乎其微,反而浪費(fèi)了存儲(chǔ)空間。相反,如果我們查找的數(shù)據(jù)只包含在少部分的文件中,就應(yīng)該果斷使用布隆過濾器。

  2. 應(yīng)該選擇行級(jí)還是行加列級(jí)布隆過濾器?很顯然,行加列級(jí)因?yàn)榱6雀?xì),占用的存儲(chǔ)空間也就越多。因此,如果用戶總是讀取整行的數(shù)據(jù),行級(jí)布隆過濾器就夠用了。在可以選擇的情形下,盡可能使用行級(jí)布隆過濾器,因?yàn)樗陬~外的空間開銷和利用過濾存儲(chǔ)文件提升性能之間取得了更好的平衡。

注[1]: 注意這里的塊不是HDFS的塊,HBase塊的默認(rèn)大小是64KB??梢愿鶕?jù)需要配置不同的大小,對(duì)于順序訪問較多的表,建議使用較大的塊;隨機(jī)訪問較多的表,建議使用較小的塊。

參考資料:《HBase權(quán)威指南》

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

相關(guān)閱讀更多精彩內(nèi)容

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