更新时间:2024-10-28 GMT+08:00

使用ZSTD_JNI压缩算法压缩Hive ORC表

操作场景

ZSTD_JNI是ZSTD压缩算法的native实现,相较于ZSTD而言,压缩读写效率和压缩率更优,并允许用户设置压缩级别,以及对特定格式的数据列指定压缩方式。

目前仅ORC格式的表支持ZSTD_JNI压缩方式,而普通的ZSTD压缩算法支持全量存储格式而不仅限于ORC,所以建议用户对数据压缩有特殊要求的场景下再使用此特性。

该章节内容仅适用MRS 3.2.0及之后版本。

创建ZSTD_JNI压缩表示例

  1. 以Hive客户端安装用户登录安装客户端的节点。
  2. 执行以下命令,切换到客户端安装目录,例如安装目录为“/opt/client”,请用户根据实际情况修改。

    cd /opt/client

  3. 执行以下命令配置环境变量。

    source bigdata_env

  4. 集群认证模式是否为安全模式。

    • 是,执行以下命令进行用户认证,然后执行5

      kinit Hive业务用户

    • 否,执行5

  5. 执行以下命令登录Hive客户端。

    beeline

  6. ZSTD_JNI压缩格式的建表方式如下:

    • 使用此压缩算法时,只需在创建ORC表时指定表属性参数“orc.compress”为ZSTD_JNI即可,如:

      create table tab_1(...) stored as orc TBLPROPERTIES("orc.compress"="ZSTD_JNI");

    • ZSTD_JNI的压缩级别的取值范围为1~19,数值越高压缩比越高,相对压缩读写速率会变慢;数值越低压缩比越低,相对读写速率会变快,缺省默认值为“6”。建表时设置表属性参数“orc.global.compress.level”即可设置压缩级别,如:

      create table tab_1(...) stored as orc TBLPROPERTIES("orc.compress"="ZSTD_JNI", 'orc.global.compress.level'='3');

    • 用户可以对特定的数据格式列指定压缩,对业务数据进一步压缩。当前识别的特定格式数据包括:JSON数据列、BASE64数据列、时间戳数据列和UUID数据列。建表时设置表属性参数“orc.column.compress”即可。

      例如,以下示例指定了压缩格式为ZSTD_JNI,压缩列f2为JSON格式的数据,f3为BASE64格式的数据,f4为时间戳格式的数据,f5为UUID格式的数据:

      create table test_orc_zstd_jni(f1 int, f2 string, f3 string, f4 string, f5 string) stored as orc

      TBLPROPERTIES('orc.compress'='ZSTD_JNI', 'orc.column.compress'='[{"type":"cjson","columns":"f2"},{"type":"base64","columns":"f3"},{"type ":"gorilla","columns":{"format": "yyyy-MM-dd HH:mm:ss.SSS", "columns": "f4"}},{"type":"uuid","columns":"f5"}]');

      用户可根据实际情况按照对应格式插入数据即可实现进一步压缩的效果。