内存压缩

    开发人员视图可在 中找到。

    内存压缩在高数据流失时效果最佳;当数据仍在内存中时,可以消除覆盖或过度版本。如果写入都是唯一的,则可能会拖动写入吞吐量(内存中压缩成本 CPU)。我们建议您在部署到生产之前进行测试和比较。

    在本节中,我们将介绍如何启用 Accordion 和可用的配置。

    78.启用

    要启用内存中压缩,请在您希望行为的每个列族上设置 IN_MEMORY _COMPACTION 属性。 IN_MEMORY _COMPACTION 属性可以具有四个值之一。

    • BASIC :基本策略启用刷新并保持刷新管道,直到我们跳过管道最大阈值,然后我们刷新到磁盘。没有内存中的压缩,但可以帮助提高吞吐量,因为数据从挥霍的原生 ConcurrentSkipListMap 数据类型转移到更紧凑(和高效)的数据类型。

    • EAGER :这是 BASIC 政策加上内存压缩的冲洗(很像是对 hfiles 进行的盘上压缩);在压缩方面,我们应用磁盘规则来消除版本,重复,ttl’d 单元格等。

    要在表 萝卜 中的 info 列系列上启用 BASIC ,请禁用该表并将该属性添加到 info 列族,然后重新启用:

    请注意 INMEMORY_COMPACTION 属性如何显示为 _METADATA 映射的一部分。

    默认情况下,新的 hbase 系统表将具有 BASIC 内存中压缩集。为了另外指定,在新的表创建时,将 hbase.hregion.compacting.memstore.type 设置为 NONE (注意,设置此值后创建系统表将不具有追溯效果;您必须更改表格以将内存中属性设置为 NONE )。

    当内存中的刷新发生时,通过将配置的区域刷新大小(在表描述符中设置或从 hbase.hregion.memstore.flush.size 中读取)除以列族的数量然后相乘来计算 hbase.memstore.inmemoryflush.threshold.factor 。默认值为 0.014。

    监视管道所承载的刷新次数,以便符合 memstore 大小调整的范围,但您也可以通过设置 hbase.hregion.compacting.pipeline.segments.limit 来设置总刷新次数的最大值 。默认值为 2。

    创建列族 Store 时,它会说明哪些 memstore 类型有效。在撰写本文时,有一个老派 DefaultMemStore 填充 ConcurrentSkipListMap ,然后刷新到磁盘或新的 CompactingMemStore ,它是提供这个新功能的实现内存中压缩设施。以下是来自 RegionServer 的日志行,该日志行显示了一个名为 系列 的列族存储配置为使用 CompactingMemStore

    1. 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 级别日志记录,以查看其操作的详细信息。