存储优化技术Apache Parquet简介

随着为分析而生成和存储的数据量以不断增长的速度增长,开发人员正在尽可能从各个角度优化性能并降低成本。在PB的规模上,即使是边际收益和优化也可以为公司节省数百万美元的存储和处理数据的硬件成本。

Apache Parquet就是这些优化技术的一个例子。在本文中,你将了解什么是Parquet,它是如何工作的,以及许多公司和项目如何将Parquet用作其架构中的关键组件。

什么是Apache Parquet?

Parquet是Twitter和Cloudera在捐赠给Apache基金会之前开发的一种面向列的开源存储格式。Parquet旨在改进Hadoop现有的存储格式,包括各种性能指标,如通过压缩减少磁盘上的数据大小和加快分析查询的读取速度。

随着时间的推移,越来越多的项目和公司采用了Parquet,它已经成为那些希望让用户更容易导入和导出数据的项目的通用交换格式。

采用Parquet可以让新用户更容易地迁移或采用新工具,同时对其工作流程的干扰最小,因此对用户和希望为其产品获取新用户的公司都有好处。

Apache Parquet技术突破

Parquet采用了许多创新技术,以提供出色的性能。在深入讨论细节之前,我们可以将结果与另一种用于存储数据的文件格式进行比较:简单的CSV(逗号分隔值文件)。

当将1 TB的CSV文件转换为Parquet时,Databricks中的一些数字显示以下结果:

——文件大小减少到130 GB,减少了87%。

——查询运行时间从236秒减少到6.78秒,快了34倍。

——为查询扫描的数据量从1.15TB降至2.51GB,减少了99%。

——成本从5.75美元降至0.01美元,降低了99.7%。

那么,是什么秘密使Parquet的性能比CSV和其他文件格式好得多呢?让我们来看看Parquet背后的一些关键概念和功能:

运行长度和字典编码——Parquet能够简单地列出该值在一列中出现的次数,而不是将同一值多次存储在磁盘上,从而节省了频繁重复值的数据集的大量空间。这方面的一个例子是CPU监控,其中每个值的利用率都在1-100范围内。

记录切碎和组装——Apache Parquet借用了谷歌Dremel论文中的一项技术,该技术允许Parquet将嵌套数据结构映射到基于列的布局。这样做的好处是,开发人员仍然可以以更自然的嵌套样式处理数据,同时获得基于列的数据结构的性能优势。

丰富的元数据——Under the hood Parquet跟踪大量的元数据,这是实现上述策略所必需的。Parquet数据分为行组、列块和页。文件可以包含多个行组,并且这些行组中的每一个都只包含一个列块。每个列块包含一页或多页数据。所有这些复杂性都被抽象了,开发人员不必担心。

所有这些特性共同作用,赋予了Parquet的性能特点。简单来说,就是提供元数据来优化查询,以减少计算资源需求,同时减少重复数据点的数量,从而降低存储成本。这会加快查询速度,减少存储需求。

在云计算时代,Parquet尤其有用,因为许多云服务都是根据处理和扫描的数据量收费的。因为Parquet保留了关于数据结构的额外元数据,所以它能够显著减少被扫描的不必要数据量,因此,你只需获取所需的数据,而不必付费扫描、处理和分析完成查询所不需要的数据。

使用Apache Parquet的公司和项目

许多项目支持将Parquet作为导入和导出数据的文件格式,并在内部使用Parquet进行数据存储。以下是其中的一小部分(以及它们的用途):

Hadoop是一个基于谷歌MapReduce论文的大数据处理工具。Parquet最初设计为用于Hadoop的文件格式。

Apache Iceberg试图通过允许Spark、Trino和Flink等流处理工具从同一存储后端查询和处理所有数据,使普通关系数据库表的简单性在大数据规模下发挥作用。

Delta Lake是一个用于构建数据湖式架构的开源存储框架。Delta Lake与Spark、PrestoDB、Flink和Trino等通用计算工具集成,使处理和存储数据变得简单。

Apache Spark是一个用于处理大量数据的分析引擎。除了Pandas API等高级工具外,它还允许使用SQL进行数据处理。

Apache Parquet和InfluxDB

InfluxDB时间序列数据库是另一个严重依赖Parquet的项目,专门用于InfluxD的新的列式存储引擎IOx。InluxDB使用Parquet使用对象存储持久存储数据。这允许在热存储层和冷存储层之间高效地移动数据,从而允许InluxDB为用户提供更好的性能,同时降低存储成本。与InfluxDB之前的迭代相比,它还提供了更好的数据压缩比。

InluxDB与Parquet一起工作,将发送到InluxD的数据以行协议格式映射,将行协议中定义的标记、字段和时间戳映射到Parquet中的列,然后可以使用基于该字段值的数据类型的最佳压缩算法来压缩这些列,按时间范围分割拼花文件,这样您只需以最少的拼花文件访问量获取所需的时间序列数据。当从Parquet文件中提取数据时,使用ApacheArrow格式将其加载到内存中,该格式也是基于列的,因此产生的性能开销最小。

总结

在大规模处理数据时,每一点效率的提升都会为公司和用户带来重大利益。Parquet只是众多致力于提高效率的项目之一。也许你不会作为开发人员直接与Parquet进行交互,但你经常使用的一些工具很有可能是在幕后使用Parquet。

原文链接:

https://thenewstack.io/an-introduction-to-apache-parquet/

202cf4b36968da8971b782eeca4566fa.jpeg

0ad2c2ca99706a8979670ef28f993d74.jpeg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值