Hive文件存储格式压缩性能对比


发布于 2017-05-07 / 38 阅读 / 0 评论 /
不同的Hive文件存储格式与压缩算法组合之后的计算效率压缩性能有较大差异。

下面通过各种HIVE存储格式与压缩方式的组合,来比较各种组合下的压缩比率。

1.HDFS上的文本文件

把数据以文本的形式写入HIVE管理表对应的HDFS的分区文件中,是普通的行存储,此时HDFS上数据的大小为37.6MB。

2.Parquet列存储

Parquet列存储可将文件的大小减小。把第一节中的HDFS文件以Hive表的形式存储,需执行以下两个步骤:

(1)第一步:创建一张管理表,存储格式为Parquet(即STORED AS Parquet)。

(2)第二步:将第一节中的表中数据导入第一步创建的管理表中,执行“INSERT OVERWRITE TABLE …… SELECT ……”语句。

此时,表目录的存储大小为16.14MB。

3.Parquet格式+snappy压缩

通过创建parquet格式的hive表,并使用snappy压缩算法,可实现文件的压缩,减少数据的存储大小,但会增加数据的加载速度。建表语句如下所示:

set parquet.compression=snappy;
create table if not exists test_db.test_parquet_snappy(
id              STRING,
sessionId       STRING,
ip              STRING
)
PARTITIONED BY(date_str String,hour_str STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
STORED AS Parquet

建表完成后,把数据“INSERT OVERWRITE”到该表中。

此时,表目录的存储大小为9.2MB。

4.ORC格式+snappy压缩

通过创建orc格式的hive表,并使用snappy压缩算法,可实现文件的进一步压缩。建表语句例如下SQL所示:

create table if not exists test_db.test_orc_snappy(
id              STRING,
sessionId       STRING,
ip              STRING
)
PARTITIONED BY(date_str String,hour_str STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
STORED AS ORC
TBLPROPERTIES (“orc.compress"="SNAPPY")

建表完成后,把数据“INSERT OVERWRITE”到该表中。

此时,表目录的存储大小为6.54MB。

5.压缩性能

下图是展示了使用不同格式存储TPC-H和TPC-DS数据集中两个表数据的文件大小对比,可以看出Parquet较之于其他的二进制文件存储格式能够更有效的利用存储空间,而新版本的Parquet(2.0版本)使用了更加高效的页存储方式,进一步的提升存储空间。

可以发现,Parquet在存储性能上有巨大优势。