大数据列式存储 Parquet 和 ORC 简介

01

背景

随着大数据 Hadoop/Spark 生态的不断发展和成熟,TextFile、CSV这些文本格式存储效率低,查询速度慢,往往不能很好地满足大数据系统中存储和查询的需求,列式存储也在大数据社区逐渐兴起到成熟。目前,使用比较广泛的列式存储主要是 Apache Parquet 和 Apache ORC,Parquet 由谷歌的 Dremel 发展而来,由Twitter 贡献给社区,ORC 则是由 Hive 的 RC File 发展而来,从Hive项目中独立出来,二者目前都是比较活跃的列式存储项目。

02

什么是列式存储

传统的数据编码方式是以行为单位进行,列式存储则是将数据划分成数据块,每个数据块内部按列的方式进行编码存储,通过使用列式存储会有以下好处:

存储效率更高,因为同一列的数据类型一致,编码效率也会更高

查询效率更高,利用列式存储的统计信息,可以跳过大量的数据,减少IO压力

03

Parquet 和 ORC的基本对比

04

Parquet 和 ORC的编码效率对比

1 什么是编码

列式存储在存储数据时,为了提高压缩效率,会进行一些编码操作,如图所示。

2 常见的编码方式

Run-length encoding(RLE)

Dictionary

Bitpacking

Zigzag for signed

3 Parquet 和 ORC编码对比

4 使用TPC数据集的测试结果

【大数据开发学习资料领取方式】:加入大数据技术学习交流扣扣群957加205后面962,私信管理员即可免费领取开发工具以及入门学习资料

分别使用相同的 TPC 数据集进行测试,从压缩效率上讲,数据库大小越小,压缩效率越好。这里 ORC 使用 Zlib 压缩, Parquet 使用 Gzip 压缩。

TPC-BB and TPC-DS Decimal 版本下,ORC 比 Parquet 占用空间节省大约 10%;

TPC-DS Double版本下,Parquet 的使用的空间节省 2% 左右。

TPC-DS(Decimal Version): https://github.com/cloudera/impala-tpcds-kit

TPC-DS(Double Version): https://github.com/hortonworks/hive-testbench

TPCx-BB: http://www.tpc.org/tpcx-bb/

05

Parquet 和 ORC Encoding的实现细节对比

1 Parquet 的Integer编码实现

Parquet 的 Integer的是通过字典的编码方式存储的,为了防止字典过大,超过字典上限后,则通过其他方式存储。

PARQUET_V1 和 PARQUET_V2 是 Parquet 内部使用的版本,可以通过相应的参数进行选择。

2 Parquet 字典的实现

在实际存储时,数据库会有大量重复的值,这时字典的效率还是不错的,不够,目前的 Parquet实现还有两个问题

问题字典是明文存储,没有编码,浪费存储空间;

字典编号是使用RLE编码,但是编码效率还有提升空间。

3 Parquet 的 DeltaBinaryPacking

Parquet 的 DeltaBinaryPacking 的实现参考了以下博客,具体的格式如图。

http://lemire.me/blog/archives/2012/09/12/fast-integer-compression-decoding-billions-of-integers-per-second/

原始值:6,6,6,6,6,6,13,17

编码后:3,0,6,-2,13,17

ORC Integer 在 0.12的版本

HIVE在 0.12之后做了比较好的优化,可以覆盖常见的四种场景,效果也会比较好

SHORT_REPEAT : Short repeated integer sequences.

DELTA : Monotonically increasing or decreasing sequences, sequences with fixed delta values or long

1 sequences.

DIRECT : Random integer sequences whose number of bit requirement doesn't vary a lot

PATCHED_BASE : Random integer sequences whose number of bit requirement varies beyond a

threshold.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值