
# 创建ZSTD压缩格式的Hive表
#### 操作场景
文件压缩可以减少储存文件的空间，并且提高数据从磁盘读取和网络传输的速度，Hive支持创建表时配置SNAPPY、ZLIB、Gzip、Bzip2、ZSTD等压缩格式。
ZSTD（全称为Zstandard）是一种开源的无损数据压缩算法，其压缩性能和压缩比均优于当前Hadoop支持的其他压缩格式，本章节介绍如何创建ZSTD压缩格式的Hive表。Hive支持基于ZSTD压缩的存储格式包括ORC、RCFile、TextFile、JsonFile、Parquet、SequenceFile和CSV。
Hive表支持的其他压缩格式介绍请参见[表1]。
 表1Hive表支持的压缩格式 
| 压缩类型     | 说明                                                                                                                                                                                        | 支持的Hive表存储格式                                          | 适用场景              |
|:---|:---|:---|:---|
| SNAPPY   | SNAPPY是一种快速压缩算法，压缩率中等，但压缩和解压速度非常快。                                                                                                                                                        | TextFile、RCFile、SequenceFile、Parquet、ORC              | 快速压缩和解压。          |
| ZLIB     | ZLIB是一个高效、可靠且广泛应用的数据压缩库，基于 DEFLATE算法，支持多种压缩级别和流式处理。                                                                                                                                       | TextFile、RCFile、SequenceFile、Parquet、ORC              | 适用于压缩比要求较高场景。     |
| Gzip     | Gzip是一种广泛使用的压缩算法，压缩率较高，但压缩和解压速度较慢。 Gzip是基于ZLIB实现的，使用DEFLATE算法进行压缩，但Gzip文件格式还包含了一些额外的元数据。                                                                      | TextFile、RCFile、SequenceFile、Parquet、ORC              | 高压缩率，适合存储。        |
| 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表](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_24507.html)。 | ORC                                                   | 性能和压缩率更优。         |
   
#### 前提条件
- 已安装集群客户端，安装客户端具体操作请参见[安装客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0089.html)。
- 已准备Hive组件业务用户，对应用户需具有创建Hive表的权限，例如，该用户属于"hive"、"hadoop"用户组，主组为"hive"。创建Hive用户具体操作请参见[创建Hive用户并绑定角色](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_0949.html#mrs_01_0949__section15172119027)。
 
#### 创建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查看表信息   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002319456777.png "点击放大")
   
   
 
