Hive Orc和Parquet格式默认采用Zstd压缩算法

举报
wangzhen 发表于 2020/05/21 09:29:23 2020/05/21
【摘要】 hive性能优化

1.    Ztsandard介绍

Zstandard(或Zstd)是由FacebookYann Collet开发的一个无损数据压缩算法,Zstandard在设计上与DEFLATE.zipgzip)算法有着差不多的压缩比,但有更高的压缩和解压缩速度。在其官网(https://github.com/facebook/zstd)给出的性能测试中,Zstandardsnappylzo等算法有较高的优势。

Compressor name

Ratio

Compression

Decompress.

zstd 1.4.5 -1

2.884

500 MB/s

1660 MB/s

zlib 1.2.11 -1

2.743

90 MB/s

400 MB/s

brotli 1.0.7 -0

2.703

400 MB/s

450 MB/s

zstd 1.4.5 --fast=1

2.434

570 MB/s

2200 MB/s

zstd 1.4.5 --fast=3

2.312

640 MB/s

2300 MB/s

quicklz 1.5.0 -1

2.238

560 MB/s

710 MB/s

zstd 1.4.5 --fast=5

2.178

700 MB/s

2420 MB/s

lzo1x 2.10 -1

2.106

690 MB/s

820 MB/s

lz4 1.9.2

2.101

740 MB/s

4530 MB/s

zstd 1.4.5 --fast=7

2.096

750 MB/s

2480 MB/s

lzf 3.6 -1

2.077

410 MB/s

860 MB/s

snappy 1.1.8

2.073

560 MB/s

1790 MB/s

       Zstd算法可以通过参数--fast来权衡压缩比与解压缩速度。解压速度越高,压缩比约低。Hive3.1.1Orc默认采用zlib作为压缩算法(OrcConfig类中orc.compress参数指定),parquet格式默认不压缩。Zstd在最高压缩率的情况下,其压缩速度是zlib5.56倍,解压速度是其4.15倍。所以如果hiveorcparquet格式默认采用zstd算法,那么在hivemap读数据阶段,可以极大的减少数据解压耗时,在reduce阶段,减少数据压缩的耗时,在整体上可以提升hive的性能。

2.    Hadoop开启Zstd压缩能力

HADOOP-13578(https://issues.apache.org/jira/browse/HADOOP-13578) Hadoop3中增加了Zstd压缩本地库,需要依赖facebookZstd库。编译Hadoop时开启Zstd本地库编译的步骤如下:

1.     下载编译并安装Zstd依赖库

wget https://github.com/facebook/zstd/releases/download/v1.4.4/zstd-1.4.4.tar.gz

tar -xzf zstd-1.4.4.tar.gz

cd zstd-1.4.4

make && make install

2.     编译Hadoop3时默认是不开启的,需要在maven参数中设置相关开启参数。

mvn clean package -Dzstd.lib=/usr/local/lib   -Dbundle.zstd=true

参数zstd.lib指向本地库中zstd依赖,使用bundle.zstd表示开启编译zstd,如果本地zstd库找不到,编译会失败。

3.    Hive orc格式设置ZSTD为默认压缩算法。

ORC-363(https://jira.apache.org/jira/browse/ORC-363)增加了zStandard压缩算法,影响版本1.6hive-3.1.1版本中使用orc-1.5.1,需要升级为orc-1.6.3当前hive不支持orc-1.6)。

       hive中设置ORC格式的压缩算法有两种方式:1.建表时在TBLPROPERTIES中增加属性”orc.compress”=”ZSTD” ; 2.设置hive参数hive.exec.orc.default.compress=ZSTD。第一中方式需要对每张表进行设置,第二种方式是针对hive全局设置的,比较方便。因此在hive-site.xml中做如下的配置即可开启ORCZSTD压缩算法。

<property>
    <name>hive.exec.orc.default.compress</name>
    <value>ZSTD</value>
    <description>orc-1.6.0可选的值:NONE,ZLIB,SNAPPY,LZO,LZ4,ZSTD</description>
</property>

4.    Hive parquet格式设置ZSTD为默认压缩算法

Hive Parquet默认不采用压缩算法,有两种方式可以修改压缩算法:

1.TBLPROPERTIES中设置参数”parquet.compression”=”zstd”;

2.设置Hadoop的参数来指parquet压缩算法,

<property>
    <name> mapreduce.output.fileoutputformat.compress   </name>
    <value>true</value>
</property>
<property>
    <name> mapreduce.output.fileoutputformat.compress.codec </name>
    <value> org.apache.hadoop.io.compress.ZStandardCodec</value>
</property>


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。