W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
請參見HBase列族數(shù)量。
請參閱:盡量減少行和列的大小。
在某些表需要不同區(qū)域大小而不是配置的默認區(qū)域大小的情況下,可以通過在每個表的基礎上,通過HTableDescriptor的setFileSize來設置區(qū)域大小。
Bloom過濾器是以其創(chuàng)建者Burton Howard Bloom的名字命名的,它是一種數(shù)據(jù)結構,用于預測給定元素是否屬于一組數(shù)據(jù)。Bloom過濾器的肯定結果并不總是準確的,但否定結果是準確的。Bloom過濾器被設計成對于數(shù)據(jù)集來說“足夠準確”,這些數(shù)據(jù)集非常大以至于傳統(tǒng)的哈希機制是不切實際的。有關Bloom過濾器的更多信息,請參閱http://en.wikipedia.org/wiki/Bloom_filter。
就HBase而言,Bloom過濾器提供了一個輕量級的內存結構,可以將給定Get操作(Bloom過濾器不能與Scans一起使用)的磁盤讀取次數(shù)減少到僅包含所需行的StoreFiles。潛在的性能增益隨著并行讀取的數(shù)量而增加。
Bloom過濾器本身存儲在每個HFile的元數(shù)據(jù)中,并且永遠不需要更新。當因為區(qū)域部署到RegionServer而打開HFile時,Bloom過濾器將加載到內存中。
HBase包括一些調整機制,用于折疊Bloom過濾器以減小大小并將誤報率保持在一個理想的范圍內。
Bloom過濾器在HBASE-1200中引入。從HBase 0.96開始,默認情況下啟用基于行的Bloom過濾器。(HBASE-8450)
從HBase 0.96開始,默認情況下啟用基于行的Bloom過濾器。您可以選擇禁用它們或更改某些表以使用行+列Bloom過濾器,具體取決于數(shù)據(jù)的特征以及如何將其加載到HBase中。
要確定Bloom過濾器是否會產生積極影響,請檢查RegionServer度量標準中的blockCacheHitRatio值。如果啟用了Bloom過濾器,則值blockCacheHitRatio應該增加,因為Bloom過濾器正在過濾掉絕對不需要的塊。
您可以選擇為行,或行+列組合來啟用Bloom過濾器。如果您通常掃描整行,則行+列組合不會提供任何好處?;谛械腂loom過濾器可以對行+列進行Get操作,但不能使用其他方法。但是,如果您有大量的列級別的Puts,以便每個StoreFile中可能存在一行,則基于行的過濾器將始終返回正結果并且不會帶來任何好處。除非每行有一列,否則行+列Bloom過濾器需要更多空間,以便存儲更多密鑰。當每個數(shù)據(jù)條目的大小至少為幾千字節(jié)時,Bloom過濾器效果最佳。
當您的數(shù)據(jù)存儲在幾個較大的StoreFiles中時,開銷將減少,以避免在低級掃描期間額外的磁盤IO找到特定的行。
Bloom過濾器需要在刪除時重建,因此可能不適合具有大量刪除的環(huán)境。
在列族上啟用Bloom過濾器。您可以使用HColumnDescriptor的setBloomFilterType方法或使用HBase API來完成此操作。有效值是NONE,ROW(默認值),或ROWCOL。
以下示例創(chuàng)建一個表,并在colfam1列族上啟用ROWCOL Bloom過濾器。
hbase> create 'mytable',{NAME => 'colfam1', BLOOMFILTER => 'ROWCOL'}
您可以在hbase-site.xml中配置以下設置。
參數(shù) | 默認值 | 描述 |
---|---|---|
io.storefile.bloom.enabled | yes | 如果出現(xiàn)問題,設置為no以殺死服務器范圍內的Bloom過濾器 |
io.storefile.bloom.error.rate | .01 | Bloom過濾器的平均誤報率。折疊用于維持誤報率。表示為百分比的十進制表示形式。 |
io.storefile.bloom.max.fold | 7 | 保證最大折疊率。不需要更改此設置,不建議這樣做。 |
io.storefile.bloom.max.keys | 1.28 | 對于默認(單個塊)Bloom過濾器,這指定了最大鍵數(shù)。 |
io.storefile.delete.family.bloom.enabled | true | 主開關啟用Delete Family Bloom過濾器并將其存儲在StoreFile中。 |
io.storefile.bloom.block.size | 131072 | 目標Bloom塊大小。大約這個大小的Bloom過濾器塊與數(shù)據(jù)塊交織。 |
hfile.block.bloom.cacheonwrite | false | 為復合Bloom過濾器的內聯(lián)塊啟用寫入高速緩存。 |
可以為表中的每個ColumnFamily配置塊大小,默認為64k。較大的單元值需要較大的塊大小。塊大小和生成的StoreFile索引之間存在反比關系(即,如果blocksize加倍,則結果索引應該大致減半)。
ColumnFamilies可以選擇定義為內存中。數(shù)據(jù)仍然保留在磁盤上,就像任何其他ColumnFamily一樣。內存塊在塊緩存中具有最高優(yōu)先級,但不保證整個表將在內存中。
生產系統(tǒng)應使用其ColumnFamily定義進行壓縮。
壓縮會縮小磁盤上的數(shù)據(jù)。當它在內存中(例如,在MemStore中)或在線上(例如,在RegionServer和Client之間傳輸)時,它會膨脹。因此,雖然使用ColumnFamily壓縮是最佳做法,但它不會完全消除過大的Keys,過大的ColumnFamily名稱或過大的列名稱的影響。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: