布隆過濾器在HBase中的應(yīng)用 - Echo的博客 - 博客頻道 - CSDN.NET
http://blog.csdn.net/echozhan/article/details/53154009
在討論布隆過濾器在Hbase中的應(yīng)用之前荒揣,先介紹一下HBase的塊索引機(jī)制刁赖。塊索引是HBase固有的一個(gè)特性,因?yàn)镠Base的底層數(shù)據(jù)是存儲在HFile中的割坠,而每個(gè)HFile中存儲的是有序的<key, value>鍵值對抽诉,HFile文件內(nèi)部由連續(xù)的塊組成[1]陨簇,每個(gè)塊中存儲的第一行數(shù)據(jù)的行鍵組成了這個(gè)文件的塊索引,這些塊索引信息存儲在文件尾部迹淌。當(dāng)HBase打開一個(gè)HFile時(shí)河绽,塊索引信息會優(yōu)先加載到內(nèi)存;HBase首先在內(nèi)存的塊索引中進(jìn)行二分查找唉窃,確定可能包含給定鍵的塊耙饰,然后讀取磁盤塊找到實(shí)際想要的鍵。
但實(shí)際應(yīng)用中纹份,僅僅只有塊索引滿足不了需求苟跪,這是因?yàn)椋瑝K索引能幫助我們更快地在一個(gè)文件中找到想要的數(shù)據(jù)蔓涧,但是我們可能依然需要掃描很多文件件已。而布隆過濾器就是為解決這個(gè)問題而生。因?yàn)椴悸∵^濾器的作用是元暴,用戶可以立即判斷一個(gè)文件是否包含特定的行鍵篷扩,從而幫我們過濾掉一些不需要掃描的文件。如下圖所示茉盏,塊索引顯示每個(gè)文件中都可能包含對應(yīng)的行鍵鉴未,而布隆過濾器能幫我們跳過一些明顯不包含對應(yīng)行鍵的文件。
在使用布隆過濾器時(shí)鸠姨,需要注意兩個(gè)問題:
- 什么時(shí)候應(yīng)該使用布隆過濾器铜秆?根據(jù)上面的描述,布隆過濾器的主要作用讶迁,是幫助HBase跳過那些顯然不包括所查找數(shù)據(jù)的底層文件连茧。那么,當(dāng)所查找的數(shù)據(jù)均勻分布在所有文件中(當(dāng)用戶定期更新所有行時(shí),就可能導(dǎo)致這種情況)梅屉,布隆過濾器的作用就微乎其微值纱,反而浪費(fèi)了存儲空間鳞贷。相反坯汤,如果我們查找的數(shù)據(jù)只包含在少部分的文件中,就應(yīng)該果斷使用布隆過濾器搀愧。
- 應(yīng)該選擇行級還是行加列級布隆過濾器惰聂?很顯然,行加列級因?yàn)榱6雀?xì)咱筛,占用的存儲空間也就越多搓幌。因此,如果用戶總是讀取整行的數(shù)據(jù)迅箩,行級布隆過濾器就夠用了溉愁。在可以選擇的情形下,盡可能使用行級布隆過濾器饲趋,因?yàn)樗陬~外的空間開銷和利用過濾存儲文件提升性能之間取得了更好的平衡拐揭。
注[1]: 注意這里的塊不是HDFS的塊,HBase塊的默認(rèn)大小是64KB奕塑√梦郏可以根據(jù)需要配置不同的大小,對于順序訪問較多的表龄砰,建議使用較大的塊盟猖;隨機(jī)訪問較多的表,建議使用較小的塊换棚。
HBase–常用過濾器篇 - 圈里圈外 - 開源中國社區(qū)
https://my.oschina.net/circleblog/blog/715724
5. 布隆過濾器 BloomFilter簡介:hbase的storefile有很多式镐,隨機(jī)查的時(shí)候可能需要遍歷很多storefile,如果在建表的時(shí)候指定了bloomfilter固蚤,則在get查詢(scan不管用)的時(shí)候就可以過濾掉很多不符合規(guī)則的storefile碟案,提高查詢效率。