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