parquet列式存储格式

(1) 2024-07-09 21:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
parquet列式存储格式,希望能够帮助你!!!。

一、历史背景

Parquet是Hadoop生态圈中主流的列式存储格式,它使用 Google 的 Dremel 论文中概述的技术,列式存储嵌套的数据结构(传说中3秒查询1PB的数据)。最早是由Twitter和Cloudera合作开发,当时Twitter的日增压缩的数据量达到100TB+,存储在HDFS上,他们会使用多种计算框架(例如MapReduce、Hive、Pig等)对这些数据做分析和挖掘;日志结构是复杂的嵌套数据类型,例如一个典型的日志schema有87列,嵌套了7层。所以需要设计一种列式存储格式,既能支持关系型数据,又能支持复杂的嵌套类型的数据,同时能够适配多种数据处理框架。于是Parquet第一个版本- Apache Parquet 1.0 – 在 2013 年 7 月发布。直到2015年5月开始从Apache孵化器里毕业成为Apache顶级项目。

有这样一句话流传:如果说HDFS是大数据时代文件系统的事实标准、Parquet就是大数据时代存储格式的标准。

二、简单介绍

先简单介绍下:

Parquet是一种支持嵌套结构的列式存储格式

非常适用于OLAP场景,实现按列存储和扫描

诸如Parquet这种列式存储,特点或优势主要体现在以下2个方面:

1、更高的压缩比

列存使得更容易对每个列使用高效的压缩和编码,降低磁盘空间。

2、更小的io操作

使用映射下推和谓词下推,只读取需要的列,跳过不满足条件的列,能够减少不必要的数据扫描,带来性能提升,并在表字段比较多的时候更加明显。

关于映射下推和谓词下推:

映射下推,这是列存最突出的优势,它是指在获取数据时只需要扫描需要的列,不用全部扫描。比如sql中的按列查询。

谓词下推,是指将一些过滤条件尽可能的在最底层执行以减少结果集。谓词就是指这些过滤条件,即返回boolean:true和false的表达式,比如sql中的大于、小于、等于、Like、is null等。

三、Parquet项目概述

Parquet是与语言无关,而且不与任何一种数据处理框架绑定在一起,适配多种语言和组件,能够与Parquet适配的组件:

查询引擎:包括Hive、Presto、Impala、Pig、Drill、Tajo、HAWQ、IBM Big SQL等,

计算框架:包括MapReduce,Spark,CassCading、Crunch、Scalding、Kite等,

数据模型:包括Avro、Thrift、Protocol Buffer,POJOs等。

Parquet项目主要分为三个部分:parquet-mr、parquet-format、parquet-cpp

项目组成及自下而上交互的方式如下图所示:

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复

相关推荐