You need to enable JavaScript to run this app.
导航

开启字典压缩

最近更新时间2024.02.07 10:03:42

首次发布时间2024.02.07 10:03:42

为提高存储效率,降低存储成本,表格数据库 HBase 版提供字典压缩功能。本文介绍如何开启字典压缩功能。

功能介绍

字典压缩(ZSTD_DICT)是 HBase 深度优化的压缩算法,在 ZSTD 压缩算法的基础上进行了字典采样的优化,能够进一步压缩存储空间,数据压缩比可高达 10:1 以上。经实际测试,当开启字典压缩功能后,数据量明显减少,不同压缩算法的对比结果如下:

  • 车联网数据

    数据类型原始数据ZSTD字典压缩SnappyLZ4
    车联网数据9.7GB722MB649MB1.6GB1.8GB

    alt

  • 日志数据

    数据类型原始数据ZSTD字典压缩SnappyLZ4
    日志数据7.2GB853MB427MB1.4GB1.4GB

    alt

操作步骤

使用字典压缩时,需要将 COMPRESSION 参数设置为 ZSTD_DICT,该参数为列族粒度控制。

说明

若只需要使用字典压缩,并没有其他特殊要求,仅设置 COMPRESSION 参数已经可以满足基本需求。若想要精准控制不同情况下使用不同压缩算法,表格数据库 HBase 版仍然保留了 COMPRESSION_COMPACT 参数的能力,即指定做 compact 时使用的压缩算法,该参数不设置时,会被 COMPRESSION 参数值覆盖。

Shell 客户端

  • 在创建表时开启字典压缩。

    hbase(main):007:0> create 'table_use_zstd_dict', {NAME => 'cf', COMPRESSION => 'ZSTD_DICT'}
    
  • 对已存在的表,使用字典压缩。

    hbase(main):009:0> alter 'tls',{NAME => 'cf', COMPRESSION => 'ZSTD_DICT'}
    

    说明

    修改表的压缩算法后,数据不会立即进行压缩,若想要存储空间立即下降,您需要手动执行 major_compact 'tableName' 命令。

Java 客户端

Admin admin = connection.getAdmin();
TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(TableName.valueOf("table_use_zstd_dict"))
        .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("cf1"))
                .setValue("COMPRESSION", "ZSTD_DICT")
                .build()).build();
admin.createTable(tableDescriptor);
admin.close();

进阶设置

DATA_BLOCK_COUNT_FOR_TRAINING 参数用于设置训练数据 Data Block 的数量大小,该参数为缺省配置,默认值与 Data Block 大小相关。且训练数据的大小可以决定字典的大小,训练效果直接决定了压缩效果。因此,您也可以根据实际业务需要和字典压缩功能的使用经验,自行调整该参数值进行测试,根据不同的测试结果设置符合您业务场景的最佳数值。推荐值如下:

单个 Data Block 大小32KB64KB128KB
Data Block 数量(推荐值)200 左右100 左右50 左右

注意

DATA_BLOCK_COUNT_FOR_TRAINING 设置得过大,为避免 OOM,系统会尽力采集足数的 Data Block 作为训练集。