创建ZSTD压缩格式的Hive表
操作场景
文件压缩可以减少储存文件的空间,并且提高数据从磁盘读取和网络传输的速度,Hive支持创建表时配置SNAPPY、ZLIB、Gzip、Bzip2、ZSTD等压缩格式。
ZSTD(全称为Zstandard)是一种开源的无损数据压缩算法,其压缩性能和压缩比均优于当前Hadoop支持的其他压缩格式,本章节介绍如何创建ZSTD压缩格式的Hive表。Hive支持基于ZSTD压缩的存储格式包括ORC、RCFile、TextFile、JsonFile、Parquet、SequenceFile和CSV。
Hive表支持的其他压缩格式介绍请参见表1。
压缩类型 |
说明 |
支持的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表
- 以客户端安装用户,登录安装客户端的节点。
- 执行以下命令,切换到客户端安装目录。
cd /opt/hadoopclient
- 执行以下命令配置环境变量。
source bigdata_env
- 执行以下命令认证用户,未启用Kerberos认证的用户请跳过此步骤:
kinit Hive组件业务用户
- 执行以下命令登录Hive客户端:
beeline
- 执行以下命令创建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”。
- 执行以下命令依次设置表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
- 创建Hive表:
create table tab_3(id string,name string) stored as textfile;
- 执行以下命令依次设置表2中的参数:
- ORC存储格式建表时需指定TBLPROPERTIES("orc.compress"="zstd"):
- 执行以下命令查看表信息:
desc formatted tab_1;
回显结果中会显示压缩格式信息,例如图1表示ORC格式的Hive表的的压缩方式为“zstd”。