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

本文涉及的产品
EMR Serverless StarRocks,5000CU*H 48000GB*H
EMR Serverless Spark 免费试用,1000 CU*H 有效期3个月
简介: 随着大数据 Hadoop/Spark 开源生态的不断发展和成熟,TextFile、CSV这些文本格式存储效率低,查询速度慢,往往不能很好地满足大数据系统中存储和查询的需求,列式存储也在大数据社区逐渐兴起到成熟。

大数据列式存储

背景

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

什么是列式存储

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

  • 存储效率更高,因为同一列的数据类型一致,编码效率也会更高
  • 查询效率更高,利用列式存储的统计信息,可以跳过大量的数据,减少IO压力

Parquet 和 ORC的基本对比

image

Parquet 和 ORC的编码效率对比

什么是编码

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

常见的编码方式

  • Run-length encoding(RLE)
  • Dictionary
  • Bitpacking
  • Zigzag for signed

Parquet 和 ORC编码对比

image

使用TPC数据集的测试结果

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

  • TPC-BB and TPC-DS Decimal 版本下,ORC 比 Parquet 占用空间节省大约 10%;
  • TPC-DS Double版本下,Parquet 的使用的空间节省 2% 左右。
    image

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/

附:Parquet 和 ORC Encoding的实现细节对比

Parquet 的Integer编码实现

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

版本 默认存储 补充存储
PARQUET_V1 字典 PLAIN
PARQUET_V2 字典 DeltaBinaryPacking

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

Parquet 字典的实现

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

  • 字典是明文存储,没有编码,浪费存储空间;
  • 字典编号是使用RLE编码,但是编码效率还有提升空间。
    image
Parquet 的 DeltaBinaryPacking

Parquet 的 DeltaBinaryPacking 的实现参考了以下博客,具体的格式如图。
http://lemire.me/blog/archives/2012/09/12/fast-integer-compression-decoding-billions-of-integers-per-second/
image

ORC 的 Integer 编码实现

ORC Integer 在 0.11 及之前的版本

HIVE在 0.11 及之前的版本的实现比较简单,只覆盖了重复值优化的场景,具体格式如图
image

原始值: 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.

原创文章,如需转载,请先联系作者 dapeng.sdp#alibaba-inc.com
欢迎加入Apache Spark中国技术社区参与更多直播、讨论

image

目录
相关文章
|
存储 SQL 数据采集
一篇文章彻底理解大数据的列式存储
一篇文章彻底理解大数据的列式存储
一篇文章彻底理解大数据的列式存储
|
存储 分布式计算 大数据
# Apache Spark系列技术直播# 第七讲 【 大数据列式存储之 Parquet/ORC 】
主讲人:诚历(孙大鹏)阿里巴巴计算平台事业部EMR技术专家 简介:Parquet 和 ORC 是大数据生态里最常用到的两个列式存储引擎,这两者在实现上有什异同,哪个效率更好,哪个性能更优,本次分享将和您一起探索两大列式存储。
1772 0
|
存储 大数据 SQL
大数据列式存储 Parquet 和 ORC 简介
目前,使用比较广泛的列式存储主要是 Apache Parquet 和 Apache ORC,Parquet 由谷歌的 Dremel 发展而来,由Twitter 贡献给社区,ORC 则是由 Hive 的 RC File 发展而来,从Hive项目中独立出来,二者目前都是比较活跃的列式存储项目。
1698 0
|
2月前
|
机器学习/深度学习 传感器 分布式计算
数据才是真救命的:聊聊如何用大数据提升灾难预警的精准度
数据才是真救命的:聊聊如何用大数据提升灾难预警的精准度
192 14
|
4月前
|
数据采集 分布式计算 DataWorks
ODPS在某公共数据项目上的实践
本项目基于公共数据定义及ODPS与DataWorks技术,构建一体化智能化数据平台,涵盖数据目录、归集、治理、共享与开放六大目标。通过十大子系统实现全流程管理,强化数据安全与流通,提升业务效率与决策能力,助力数字化改革。
168 4
|
3月前
|
机器学习/深度学习 运维 监控
运维不怕事多,就怕没数据——用大数据喂饱你的运维策略
运维不怕事多,就怕没数据——用大数据喂饱你的运维策略
158 0
|
4月前
|
分布式计算 DataWorks 数据处理
在数据浪潮中前行:记录一次我与ODPS的实践、思考与展望
本文详细介绍了在 AI 时代背景下,如何利用阿里云 ODPS 平台(尤其是 MaxCompute)进行分布式多模态数据处理的实践过程。内容涵盖技术架构解析、完整操作流程、实际部署步骤以及未来发展方向,同时结合 CSDN 博文深入探讨了多模态数据处理的技术挑战与创新路径,为企业提供高效、低成本的大规模数据处理方案。
297 3
|
4月前
|
SQL 人工智能 分布式计算
ODPS:数据浪潮中的成长与突围
本文讲述了作者在大数据浪潮中,通过引入阿里云ODPS体系(包括MaxCompute、DataWorks、Hologres)解决数据处理瓶颈、实现业务突破与个人成长的故事。从被海量数据困扰到构建“离线+实时”数据架构,ODPS不仅提升了数据处理效率,更推动了技术能力与业务影响力的双重跃迁。
|
2月前
|
传感器 人工智能 监控
数据下田,庄稼不“瞎种”——聊聊大数据如何帮农业提效
数据下田,庄稼不“瞎种”——聊聊大数据如何帮农业提效
142 14
|
1月前
|
传感器 人工智能 监控
拔俗多模态跨尺度大数据AI分析平台:让复杂数据“开口说话”的智能引擎
在数字化时代,多模态跨尺度大数据AI分析平台应运而生,打破数据孤岛,融合图像、文本、视频等多源信息,贯通微观与宏观尺度,实现智能诊断、预测与决策,广泛应用于医疗、制造、金融等领域,推动AI从“看懂”到“会思考”的跃迁。