🗒️Parquet(1)概述
2023-7-28
| 2023-8-21
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
有这样一句话流传:如果说 HDFS 是大数据时代文件系统的事实标准,Parquet 就是大数据时代存储格式的事实标准。

提出背景

Parquet 是 Hadoop 生态圈中主流的列式存储格式,最早是由 Twitter 和 Cloudera 合作开发,2015 年 5 月从 Apache 孵化器里毕业成为 Apache 顶级项目。
先看下 Parquet 提出的动机:
可以看出,Parquet 的主要优势是支持列式存储,支持 Hadoop 生态中的任何组件。
目前主流的数据湖框架都是基于 Parquet 提供的良好特性进行功能实现的,Parquet 的重要性不必多说。

存储层级

  • Row Group
在 Parquet 文件中,数据被组织成一系列的 Row Group,每个 Row Group 包含若干行数据。
Row Group 是 Parquet 文件的最小存储单元,在读取和写入数据时都是基本的操作单元。
  • Column Chunk
在 Row Group 中的每个列都被划分成一个 Column Chunk,每个 Row Group 包含了一组相关的列对应的 Column Chunk。
  • Page
每个Column Chunk 包含一个或多个 Page。当数据的数值范围超过 Page 的容量时,Parquet 会将该列分成多个 Page 来存储数据。在每个 Page 中,数据被使用一种特定的编码方式进行压缩编码。
以下是这些层级的简单示意图:
notion image
在 Parquet 文件中,Row Group 的大小是一个重要的配置参数,它会直接影响文件大小、读取性能和查询性能:
  1. 在 Hadoop 分布式文件系统(HDFS)中,文件被划分成一个或多个块(block),用于存储和检索文件数据。建议将 Row Group 大小设置为块大小的整数倍。这样可以确保每个 Row Group 都完全包含在一个块中,从而避免在读取时跨越多个块进行读取操作,提高读取性能。
  1. 如果数据分布比较均匀,并且查询时通常只需要部分数据列,则可以选择较小的 Row Group 大小(例如 64MB 或 128MB)。这样可以减少读取和解析的数据量,提高查询性能。
  1. 如果数据分布比较不均匀,并且查询时需要大量数据列,则可以选择较大的 Row Group 大小(例如 512MB 或 1GB)。这样可以减少元数据量,提高存储效率。
 
  • Parquet
  • 两种列式存储压缩算法Parquet(2)striping and assembly 算法
    Loading...
    目录