更新时间:2025-08-01 GMT+08:00

创建ZSTD压缩格式的Hive表

操作场景

文件压缩可以减少储存文件的空间,并且提高数据从磁盘读取和网络传输的速度,Hive支持创建表时配置SNAPPY、ZLIB、Gzip、Bzip2、ZSTD等压缩格式。

ZSTD(全称为Zstandard)是一种开源的无损数据压缩算法,其压缩性能和压缩比均优于当前Hadoop支持的其他压缩格式,本章节介绍如何创建ZSTD压缩格式的Hive表。Hive支持基于ZSTD压缩的存储格式包括ORC、RCFile、TextFile、JsonFile、Parquet、SequenceFile和CSV。

Hive表支持的其他压缩格式介绍请参见表1

表1 Hive表支持的压缩格式

压缩类型

说明

支持的Hive表存储格式

适用场景

SNAPPY

SNAPPY是一种快速压缩算法,压缩率中等,但压缩和解压速度非常快。

TextFile、RCFile、SequenceFile、Parquet、ORC

快速压缩和解压。

ZLIB

ZLIB是一个高效、可靠且广泛应用的数据压缩库,基于 DEFLATE算法,支持多种压缩级别和流式处理。

TextFile、RCFile、SequenceFile、Parquet、ORC

适用于压缩比要求较高场景。

Gzip

Gzip是一种广泛使用的压缩算法,压缩率较高,但压缩和解压速度较慢。

Gzip是基于ZLIB实现的,使用DEFLATE算法进行压缩,但Gzip文件格式还包含了一些额外的元数据。

高压缩率,适合存储。

Bzip2

Bzip2提供比Gzip更高的压缩率,但压缩和解压速度更慢。

TextFile、SequenceFile

更高压缩率,但压缩和解压速度较慢。

LZO

LZO(全称为Lempel-Ziv-Oberhumer)是一种快速压缩算法,支持高压缩率和快速解压,适用于Hadoop生态。

TextFile、RCFile、SequenceFile、Parquet

快速解压,适用于Hadoop生态。

ZSTD

ZSTD是一种开源的无损数据压缩算法,其压缩性能和压缩比均优于当前Hadoop支持的其他压缩格式。

ORC、RCFile、TextFile、JsonFile、Parquet、SequenceFile和CSV

高性能和高压缩率。

ZSTD_JNI

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

ORC

性能和压缩率更优。

前提条件

  • 已安装集群客户端,安装客户端具体操作请参见安装客户端
  • 已准备Hive组件业务用户,对应用户需具有创建Hive表的权限,例如,该用户属于“hive”、“hadoop”用户组,主组为“hive”。创建Hive用户具体操作请参见创建Hive用户并绑定角色

创建ZSTD压缩格式的Hive表

  1. 以客户端安装用户,登录安装客户端的节点。
  2. 执行以下命令,切换到客户端安装目录。

    cd /opt/hadoopclient

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

    source bigdata_env

  4. 执行以下命令认证用户,未启用Kerberos认证的用户请跳过此步骤:

    kinit Hive组件业务用户

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

    beeline

  6. 执行以下命令创建ZSTD压缩格式的表,ZSTD压缩格式的表和其他普通压缩表的SQL操作没有区别,可支持正常的增删查及聚合类SQL操作。

    • ORC存储格式建表时需指定TBLPROPERTIES("orc.compress"="zstd")
      create table tab_1(id string,name string) stored as orc TBLPROPERTIES("orc.compress"="zstd");
    • Parquet存储格式建表需指定TBLPROPERTIES("parquet.compression"="zstd")
      create table tab_2(id string,name string) stored as parquet TBLPROPERTIES("parquet.compression"="zstd");

      若需要为创建的Parquet格式的表设置默认的压缩格式为ZSTD,可在Hive Beeline客户端执行以下命令:

      set hive.parquet.default.compression.codec=zstd;

      该命令只在当前会话中生效。

    • 其他格式或通用格式建表可通过设置参数指定compress.codec为“org.apache.hadoop.io.compress.ZStandardCode”。
      1. 执行以下命令依次设置表2中的参数:
        set 参数名称=参数值;

        例如:

        set hive.exec.compress.output=true;
        表2 设置Hive其他格式或通用格式表的压缩算法为ZSTD

        参数

        参数说明

        配置值

        hive.exec.compress.output

        用于设置Hive在执行查询时是否对输出结果进行压缩。

        • true:Hive在执行查询时会对输出结果进行压缩。
        • false:默认值,Hive在执行查询时不会对输出结果进行压缩。

        true

        mapreduce.map.output.compress

        用于设置Map阶段的输出是否进行压缩。

        • true:压缩Map阶段的输出。
        • false:默认值,不压缩Map阶段的输出。

        true

        mapreduce.map.output.compress.codec

        用于设置Map阶段输出的中间结果的压缩算法,以减少数据在磁盘上存储和在网络中传输时的大小,从而提高整体处理效率。

        org.apache.hadoop.io.compress.ZStandardCodec

        mapreduce.output.fileoutputformat.compress

        用于设置MapReduce作业的最终输出结果是否进行压缩。

        • true:压缩MapReduce作业的最终输出结果。
        • false:默认值,不压缩MapReduce作业的最终输出结果。

        true

        mapreduce.output.fileoutputformat.compress.codec

        用于设置MapReduce作业最终输出结果的压缩算法,以减少存储空间和网络传输的开销。

        org.apache.hadoop.io.compress.ZStandardCodec

        hive.exec.compress.intermediate

        用于设置Hive在执行查询时是否对中间结果进行压缩。

        • true:Hive在执行查询时会对中间结果进行压缩。
        • false:默认值,Hive在执行查询时不会对中间结果进行压缩。

        true

      2. 创建Hive表:
        create table tab_3(id string,name string) stored as textfile;

  7. 执行以下命令查看表信息:

    desc formatted tab_1;

    回显结果中会显示压缩格式信息,例如图1表示ORC格式的Hive表的的压缩方式为“zstd”。

    图1 查看表信息