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