hbase 布隆過濾器

2021-08-31 03:26:43 字數 2229 閱讀 1804

前幾天,和同事聊天發現他們對於hbase的的過濾器只知道查詢過濾器,並不知道布隆過濾器什麼,所以今天的文章就來說說特殊的過濾器 - 布隆過濾器。

基本理論:

。首先要知道布隆過濾器的作用在

hbase的中我們查詢乙個rowkey時,hbase的會通過一下三個步驟查詢我們匹配的

rowkey。

1,先查詢memstore [memstore是是乙個按鍵排序的樹形結構的緩衝區],即寫記憶體是否儲存rowkey資料,如果有就返回,沒有進行第二步查詢;

2,查詢區域伺服器的讀快取blockcache是​​否存在rowkey對應資料,如果有就返回,沒有的話就行進行第三步查詢

.3,在hfile裡面根據rowkey查詢資料,不管有沒有都返回到客戶端。

這個就是普通查詢,但是布隆過濾器不一樣。

布隆過濾器是根據自己的演算法計算不同的儲存檔案中是否有該rowkey【這裡不用去糾結其中的演算法是什麼】,判斷過程:1。計算該hfile中是否有該rowkey,如果存在則返回true【這裡的真代表可能存在,因為這個布隆過濾器有百分之一的錯誤率】,然後在依次的遍歷該storefile中所有資料,如果在hfile中依次查詢但是不存在則返回no; 2 。如果演算法計算中沒有這個rowkey,則返回沒有證明沒有該資料。

這裡需要注意的是:布

過濾器有百分之一的錯誤率,但是該錯誤率只針對於真正的錯誤率,若返回沒有則證明的確不存在。

深入原理:

1,主要功能

提高隨機讀的效能

2,儲存開銷

bloom filter的資料存在storefile的meta中,一旦寫入無法更新,因為storefile是不可變的.bloomfilter是乙個列族(cf)級別的配置屬性,如果你在表中設定了布隆過濾器,那麼hbase的會在生成storefile時包含乙份布隆過濾器結構的資料,稱其為元區塊;元區塊與資料塊(真實的keyvalue資料)一起由lrublockcache維護所以,開啟布隆過濾器會有乙個的儲存及記憶體快取開銷 

.3,控制粒度

a)row

根據keyvalue中的行來過濾storefile 

舉例:假設有2個storefile檔案sf1和sf2, 

sf1包含kv1(r1 cf:q1 v),kv2(r2) cf:q1 v) 

sf2包含kv3(r3 cf:q1 v),kv4(r4 cf:q1 v) 

如果設定了cf屬性中的bloomfilter為row,那麼得(r1)時就會過濾sf2,get(r3)就會過濾sf1 

b)rowcol

根據keyvalue中的行+限定符來過濾storefile

舉例:假設有2個storefile檔案sf1和sf2, 

sf1包含kv1(r1 cf:q1 v),kv2(r2 cf:

q1 v) 

sf2包含kv3(r1 cf:q2 v),kv4(r2 cf:q2 v) 

如果設定了cf屬性中的布隆過濾器為row,無論得到(r1,q1)還是得到(r1,q2),都會讀取sf1 + sf2;而如果設定了cf屬性中的布隆過濾器為rowcol,那麼get(r1, q1)就會過濾sf2,get(r1,q2)就會過濾sf1

c)no

預設的值,預設不開啟布隆過濾器

.4,常用場景

a)根據鍵隨機讀時,在storefile級別進行過濾

b ,讀資料時,會查詢到大量不存在的金鑰,也可用於高效判斷金鑰是否存在

5,優缺點

布隆過濾器的優點:空間效率和查詢時間都遠遠超過一般的演算法,布隆過濾器儲存空間和插入/查詢時間都是常數o(k)。另外,雜湊函式相互之間沒有關係,方便由硬體並行實現。布隆過濾器不需要儲存元素本身,在某些對保密要求非常嚴格。場合的優勢有 

布隆過濾算率的英文其中器的缺點:誤之一隨著存入的元素數量增加,誤算率隨之增加但是如果元素數量太少

,則使用散。

列表足矣。 (誤判補救方法是:再建立

個小的白名單,儲存那些可能被誤判的資訊。) 

另外,一般情況下不能從布隆過濾器中刪除元素

。我們很容易想到把位陣列變成整數陣列

,每插入乙個元素相應的計數器加1,這樣刪除元素時將計數器減掉就可以了。然而要保證安全地刪除元素並非如此簡單。首先我們必須保證刪除的元素在布隆過濾器裡面。

這一點單憑這個過濾器是無法保證的

。另外計數器迴繞也會造成問題。 

**:在建立表時加入乙個引數就可以了。

布隆過濾器

布隆過濾器 bloom filter 是1970年由布隆提出的。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。如果想要判斷乙個元素是不是在乙個集合裡,一般想到...

布隆過濾器

布隆過濾器的概念 如果想要判斷乙個元素是不是在乙個集合裡,一般想到的是將所有元素儲存起來,然後通過比較確定。鍊錶,樹等等資料結構都是這種思路.但是隨著集合中元素的增加,我們需要的儲存空間越來越大,檢索速度也越來越慢 o n o logn 不過世界上還有一種叫作雜湊表 又叫 雜湊表,hash tabl...

布隆過濾器

如果想判斷乙個元素是不是在乙個集合裡,一般想到的是將集合中所有元素儲存起來,然後通過比較確定。鍊錶 樹 雜湊表 又叫雜湊表,hash table 等等資料結構都是這種思路。但是隨著集合中元素的增加,我們需要的儲存空間越來越大。同時檢索速度也越來越慢。bloom filter 是一種空間效率很高的隨機...