ORC与Parquet表的压缩

Hive表压缩功能

除了直接配置MapReduce压缩功能外,Hive的ORC表和Parquet表直接支持表的压缩属性。

但支持的压缩格式有限,ORC表支持None、Zlib、Snappy压缩,默认为ZLIB压缩。但这3种压缩格式不支持切分,所以适合单个文件不是特别大的场景。使用Zlib压缩率高,但效率差一些;使用Snappy效率高,但压缩率低。

Parquet表支持Uncompress、Snappy、Gzip、Lzo压缩,默认不压缩Uncompressed。其中Lzo压缩是支持切分的,所以在表的单个文件较大的场景会选择Lzo格式。Gzip方式压缩率高,效率低;而Snappy、Lzo效率高,压缩率低。

ORC表压缩

ORC表的压缩,需要通过表属性orc.compress来指定。orc.compress的值可以为NONE、ZLIB、SNAPPY,默认为ZLIB。

首先创建一个非压缩的ORC表:

create table compress_orc_none
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS orc
tblproperties ("orc.compress"="NONE")
as select * from compress_2;

然后再创建一个使用SNAPPY压缩的ORC表:

create table compress_orc_snappy
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS orc
tblproperties ("orc.compress"="SNAPPY")
as select * from compress_2;

这里文件大小没有减少,反而增加了,这是因为数据量较少,进行Snappy压缩时,反而增加了压缩头和尾的额外数据。数据量较大时,就会有明显的效果。

最后,使用默认压缩格式ZLIB的ORC表,进行对比:

create table compress_orc_zlib
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS orc
as select * from compress_2;

Zlib格式虽然压缩效率低,但压缩率很高,可以看到相对于None、Snappy格式,文件大小都有很明显的减少。

Parquet表压缩

Parquet表的压缩,通过表属性parquet.compression指定。值可以是Uncompressed、Snappy、Gzip、Lzo。默认是不进行压缩的Uncompressed。

首先创建一张普通Parquet表,默认为Uncompressed压缩格式:

create table compress_parquet_none
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS parquet
as select * from compress_2;

然后创建压缩率较低,但效率较高的Snappy格式的Parquet表:

create table compress_parquet_snappy
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS parquet
tblproperties ("orc.compress"="SNAPPY")
as select * from compress_2;

数据量较小,大小没有发生变化。最后创建压缩率较高,但效率较低的Gzip格式的Parquet表:

create table compress_parquet_gzip
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS parquet
tblproperties ("orc.compress"="GZIP")
as select * from compress_2;

在小数据量情况下,大小依然没有发生变化。虽然小数据量的参考意义不大,但基本能看出来,Parquet各压缩方式之间还是比较稳定的,而且整体要比ORC的压缩率要低。

全局压缩配置

除了在建表时手动指定ORC、Parquet表的压缩格式的属性之外,也可以在执行建表语句前,使用set命令进行指定。

--设置parquet表的压缩格式为SNAPPY
set parquet.compression=SNAPPY;
--设置orc表的压缩格式为SNAPPY
set orc.compress=SNAPPY

当然,这意味着,在生产环境中,可以将参数直接全局配置到hive-site.xml文件中,来规定表的压缩格式。

  <property>
    <name>parquet.compression</name>
    <value>SNAPPY</value>
  </property>

后话

如果有帮助的,记得点赞、关注。在公众号《数舟》中,可以免费获取专栏《数据仓库》配套的视频课程、大数据集群自动安装脚本,并获取进群交流的途径。

我所有的大数据技术内容也会优先发布到公众号中。如果对某些大数据技术有兴趣,但没有充足的时间,在群里提出,我为大家安排分享。

公众号自取:

公众号

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桥路丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值