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

简介: 目前,使用比较广泛的列式存储主要是 Apache Parquet 和 Apache ORC,Parquet 由谷歌的 Dremel 发展而来,由Twitter 贡献给社区,ORC 则是由 Hive 的 RC File 发展而来,从Hive项目中独立出来,二者目前都是比较活跃的列式存储项目。

背景

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

什么是列式存储

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

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

Parquet 和 ORC的基本对比

image.png

Parquet 和 ORC的编码效率对比

什么是编码

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

image.png

常见的编码方式

Run-length encoding(RLE)

Dictionary

Bitpacking

Zigzag for signed

Parquet 和 ORC编码对比

image.png

使用TPC数据集的测试结果

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

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

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

image.png

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的是通过字典的编码方式存储的,为了防止字典过大,超过字典上限后,则通过其他方式存储。

image.png

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

Parquet 字典的实现

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

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

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

image.png

Parquet 的 DeltaBinaryPacking

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

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

image.png

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

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
8月前
|
存储 SQL 数据采集
一篇文章彻底理解大数据的列式存储
一篇文章彻底理解大数据的列式存储
一篇文章彻底理解大数据的列式存储
|
1月前
|
消息中间件 分布式计算 大数据
【大数据技术Hadoop+Spark】Flume、Kafka的简介及安装(图文解释 超详细)
【大数据技术Hadoop+Spark】Flume、Kafka的简介及安装(图文解释 超详细)
136 0
|
8月前
|
SQL NoSQL Java
Redis学习---大数据技术之Redis(NoSQL简介、Redis简介、Redis安装、五大数据类型、相关配置、持久化)
Redis学习---大数据技术之Redis(NoSQL简介、Redis简介、Redis安装、五大数据类型、相关配置、持久化)
|
22小时前
|
存储 分布式计算 大数据
MaxCompute产品使用问题之创建了oss外表,格式指定的parquet,然后执行的写入,发现不是标准parquet的格式,该怎么办
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
1月前
|
消息中间件 分布式计算 大数据
大数据组件之storm简介
大数据组件之storm简介
31 2
|
1月前
|
监控 大数据 数据处理
大数据组件之Storm简介
【5月更文挑战第2天】Apache Storm是用于实时大数据处理的分布式系统,提供容错和高可用的实时计算。核心概念包括Topology(由Spouts和Bolts构成的DAG)、Spouts(数据源)和Bolts(数据处理器)。Storm通过acker机制确保数据完整性。常见问题包括数据丢失、性能瓶颈和容错理解不足。避免这些问题的方法包括深入学习架构、监控日志、性能调优和编写健壮逻辑。示例展示了实现单词计数的简单Topology。进阶话题涵盖数据延迟、倾斜的处理,以及Trident状态管理和高级实践,强调调试、性能优化和数据安全性。
31 4
|
1月前
|
存储 分布式计算 Hadoop
大数据存储技术(1)—— Hadoop简介及安装配置
大数据存储技术(1)—— Hadoop简介及安装配置
76 0
|
1月前
|
存储 大数据 虚拟化
【云计算与大数据技术】虚拟化简介及虚拟化的分类讲解(图文解释 超详细)
【云计算与大数据技术】虚拟化简介及虚拟化的分类讲解(图文解释 超详细)
327 0
|
1月前
|
机器学习/深度学习 搜索推荐 算法
「机器学习」推荐系统简介——一起来看看你是怎么被大数据杀熟的(四)
「机器学习」推荐系统简介——一起来看看你是怎么被大数据杀熟的(四)
44 0
|
1月前
|
分布式计算 并行计算 Hadoop
【云计算与大数据计算】分布式处理CPU多核、MPI并行计算、Hadoop、Spark的简介(超详细)
【云计算与大数据计算】分布式处理CPU多核、MPI并行计算、Hadoop、Spark的简介(超详细)
182 0

热门文章

最新文章