啟用HBase內(nèi)存壓縮

2018-07-16 13:47 更新

要啟用HBase的內(nèi)存壓縮,請在您希望的行為的每個列族上設(shè)置IN_MEMORY_COMPACTION屬性。該IN_MEMORY_COMPACTION屬性可以是四個值之一:

  • NONE:沒有內(nèi)存壓縮。
  • BASIC:基本策略允許刷新并保持一個刷新管道,直到我們跳過管道最大閾值,然后我們刷新到磁盤。沒有內(nèi)存壓縮,但可以幫助提高吞吐量,因為數(shù)據(jù)從揮霍的原生ConcurrentSkipListMap數(shù)據(jù)類型轉(zhuǎn)移到更緊湊(和高效)的數(shù)據(jù)類型。
  • EAGER:這是基本的策略加上內(nèi)存壓縮的刷新(很像是對hfiles進行的磁盤上壓縮);在壓縮時,我們應(yīng)用磁盤規(guī)則來消除版本,重復(fù),ttl'd單元格等。
  • ADAPTIVE:自適應(yīng)壓縮適應(yīng)工作負(fù)載。它根據(jù)數(shù)據(jù)中重復(fù)單元格的比例應(yīng)用索引壓縮或數(shù)據(jù)壓縮。實驗。

要在radish表中的info列系列上啟用BASIC,請禁用該表并將該屬性添加到info列族,然后重新啟用:

hbase(main):002:0> disable 'radish'
Took 0.5570 seconds
hbase(main):003:0> alter 'radish', {NAME => 'info', IN_MEMORY_COMPACTION => 'BASIC'}
Updating all regions with the new schema...
All regions updated.
Done.
Took 1.2413 seconds
hbase(main):004:0> describe 'radish'
Table radish is DISABLED
radish
COLUMN FAMILIES DESCRIPTION
{NAME => 'info', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536', METADATA => {
'IN_MEMORY_COMPACTION' => 'BASIC'}}
1 row(s)
Took 0.0239 seconds
hbase(main):005:0> enable 'radish'
Took 0.7537 seconds

請注意IN_MEMORY_COMPACTION屬性如何顯示為METADATA映射的一部分。

還有一個全局配置hbase.hregion.compacting.memstore.type,您可以在hbase-site.xml文件中設(shè)置該配置。使用它來設(shè)置創(chuàng)建新表時的默認(rèn)值(在創(chuàng)建列族存儲時,我們首先查看列族配置,以查找IN_MEMORY_COMPACTION設(shè)置 ,如果沒有,我們將查詢hbase.hregion.compacting.memstore .type值使用其內(nèi)容;默認(rèn)為BASIC)。

默認(rèn)情況下,新的hbase系統(tǒng)表將具有BASIC內(nèi)存中壓縮集。若要另行指定,在新表創(chuàng)建時,將hbase.hregion.compacting.memstore.type設(shè)置為NONE(注意,設(shè)置此值后創(chuàng)建系統(tǒng)表將不具有追溯效果;您將必須更改表以設(shè)置內(nèi)存屬性為NONE)。

當(dāng)內(nèi)存刷新發(fā)生時,通過將已配置的區(qū)域刷新大?。ㄔ诒砻枋龇性O(shè)置或從hbase.hregion.memstore.flush.size讀?。┏粤凶鍞?shù),然后乘以hbase.memstore.inmemoryflush.threshold.factor來計算。默認(rèn)值為0.014。

監(jiān)視管道承載的刷新次數(shù),以便符合memstore大小調(diào)整的范圍,但您也可以通過設(shè)置hbase.hregion.compacting.pipeline.segments.limit來設(shè)置總刷新次數(shù)的最大值。默認(rèn)值為2。

創(chuàng)建列族Store時,它會說明哪些memstore類型有效。在撰寫本文時,有一個老式的DefaultMemStore,它填充ConcurrentSkipListMap,然后刷新到磁盤或新的CompactingMemStore,它是提供這種新的內(nèi)存中壓縮工具的實現(xiàn)。以下是來自RegionServer的日志行,該日志行顯示了一個名為family的列族Store,配置為使用CompactingMemStore:

請注意IN_MEMORY_COMPACTION屬性如何顯示為_METADATA_映射的一部分。
2018-03-30 11:02:24,466 INFO [Time-limited test] regionserver.HStore(325):Store = family,memstore type = CompactingMemStore,storagePolicy = HOT,verifyBulkLoads = false,parallelPutCountPrintThreshold = 10

在CompactingMemStore類(org.apache.hadoop.hbase.regionserver.CompactingMemStore)上啟用TRACE級別日志記錄,以查看其操作的詳細(xì)信息。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號