Hadoop中的Parquet文件格式

时间:2020-01-09 10:34:36  来源:igfitidea点击:

Apache Parquet是Apache Hadoop生态系统中使用的列式存储格式。

什么是列导向格式

在进入Hadoop中的Parquet文件格式之前,我们首先了解什么是面向列的文件格式以及它提供了什么好处。

在面向列的存储格式中,值是按列存储的,即,同一列中每行的值是存储的,而不是像传统的行类型数据格式那样按行存储数据。

例如,如果有一个包含3列ID(int),NAME(varchar)和AGE(int)的表

IDNAMEAGE
1N135
2N245
3N355

然后以行存储格式将数据存储如下:

|||||||||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 1 | N1 | 35 | 2 | N2 | 45 | 3 | N3 | 55 |

以列格式,相同的数据将按列存储,如下所示:

|||||||||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 1 | 2 | 3 | N1 | N2 | N3 | 35 | 45 | 55 |

使用列式存储格式的好处

从以上示例的布局中可以看到,即使仅查询"名称"列,也将以面向行的格式将整个行加载到内存中。如果查询名称,则使用面向列的格式,则仅将名称列读入内存。这样,由于读取相同数据所需的I / O更少,因此查询性能得以提高。

我们还可以从布局中注意到,相同数据类型的数据彼此相邻。这有助于更好地压缩数据,因此需要较少的存储空间。

Parquet文件格式

Parquet文件格式是面向列的格式,在以下方面带来了相同的好处

  • 更少的存储空间

  • 提高查询性能

除此以外,Parquet格式还具有以柱状格式存储甚至嵌套结构的功能。其他柱状格式倾向于通过展平嵌套结构并仅以柱状格式存储顶层来存储嵌套结构。

Parquet文件格式可以与Hive,Impala,Pig和Spark等任何Hadoop生态系统一起使用。

Parquet文件格式结构

Parquet文件由页眉,行组和页脚组成。格式如下:

Parquet文件格式

标头–标头包含4字节的魔术数字" PAR1",这意味着该文件是Parquet格式的文件。

行组–将数据按逻辑水平划分为行。行组由数据集中每个列的列块组成。

列块–特定列的数据块。

页面-列块分为页面。

页脚–包含文件元数据,其中包括格式的版本,架构,额外的键/值对以及所有列元数据起始位置的位置。希望读者首先读取文件元数据以找到他们感兴趣的所有列块。然后应顺序读取列块。

请参阅如何在Hadoop中读取和写入镶木地板文件,以了解如何使用Java API和MapReduce在Hadoop中读取和写入镶木地板文件。

Parquet格式的类型

Parquet文件格式所支持的类型旨在尽可能地减少,重点是这些类型如何影响磁盘存储。类型是:

BOOLEAN:1位布尔值
INT32:32位有符号整数
INT64:64位有符号整数
INT96:96位带符号的整数
FLOAT:IEEE 32位浮点值
双:IEEE 64位浮点值
BYTE_ARRAY:任意长字节数组。

Parquet格式的逻辑类型

通过指定应如何解释原始类型,逻辑类型用于扩展可用于镶木地板存储的类型。这样可以将基本类型集降至最低,并重复使用Parquet的有效编码。