写点什么

Apache Parquet 优势与日志应用场景解析

作者:东风微鸣
  • 2025-12-23
    江苏
  • 本文字数:1762 字

    阅读完需:约 6 分钟

Apache Parquet 优势与日志应用场景解析

写作背景

近期看了几篇关于日志解决方案的文章, 发现它们都在使用 Apache Parquet 作为存储文件格式. 如下:

这勾起了我的好奇心:

  • Apache Parquet 是什么?

  • 有什么优势?

  • 什么软件可以处理 Apache Parquet?

  • 近期发现很多日志解决方案会将日志转换为 Apache Parquet, 为什么要这样处理, 有什么优势?

Apache Parquet 简介

Apache Parquet 是一种开源的列式存储文件格式,专门为大数据处理框架设计,最初由 Twitter 和 Cloudera 联合开发,现为 Apache 顶级项目。

核心优势

1. 列式存储结构

  • 与传统行式存储不同,Parquet 按列存储数据

  • 查询时只需读取相关列,大幅减少 I/O

  • 示例对比:

行式存储:Row1[col1,col2,col3], Row2[col1,col2,col3], ...列式存储:Column1[所有行的值], Column2[所有行的值], ...
复制代码

2. 高效的压缩和编码

  • 同列数据类型一致,压缩效率更高(可达行式存储的 1/10)

  • 支持多种编码:RLE、字典编码、Delta 编码等

  • 支持多种压缩:Snappy、Gzip、LZO、Zstd

3. Schema 演化支持

  • 支持向后/向前兼容的 schema 变更

  • 可以添加新列、删除列、修改列类型

4. 谓词下推(Predicate Pushdown)

  • 查询引擎可以在读取数据前过滤不相关的数据块

  • 利用列统计信息(min/max 值)跳过无关数据块

5. 嵌套数据结构支持

  • 原生支持复杂嵌套数据类型(数组、映射、结构体)

  • 使用 Dremel 记录 shredding 算法高效存储嵌套数据

能处理 Parquet 的软件/框架

大数据处理框架

  • Apache Spark(主要使用场景)

  • Apache Hive

  • Apache Impala

  • Presto/Trino

  • Apache Flink

  • Apache Arrow(内存格式转换)

查询引擎

  • AWS Athena

  • Google BigQuery

  • Azure Synapse

  • DuckDB

  • Polars

编程语言支持

  • Python(PyArrow、pandas)

  • Java

  • R

  • Go

  • .NET

日志解决方案

日志解决方案转用 Parquet 的原因

1. 成本效益

# 示例:日志存储成本对比
原始 JSON 日志:1TB → 存储成本 $$$$Parquet 压缩后:~100GB → 存储成本 $
复制代码
  • 存储成本降低 70-90%

  • 网络传输成本显著降低

2. 查询性能提升

-- 典型日志查询场景SELECT COUNT(*), error_code FROM logs WHERE date >= '2024-01-01'   AND status = 'ERROR' GROUP BY error_code;
-- Parquet 优势:-- 1. 只读取 date, status, error_code 三列-- 2. 利用列统计快速跳过无关日期分区-- 3. 压缩数据减少磁盘 I/O
复制代码

3. 适合时序数据分析

  • 日志数据天然具有时间属性

  • Parquet 支持按时间分区,优化时间范围查询

  • 结合分区剪枝(Partition Pruning)大幅提升性能

4. 兼容现代数据栈

# 典型日志处理管道原始日志 → Fluentd/Logstash → Kafka → Spark Streaming → Parquet (S3/ADLS) → Trino/Athena 查询 → BI 工具
复制代码

5. 长期存储和分析

  • Parquet 是分析型工作负载的理想格式

  • 支持数据湖架构(Delta Lake、Iceberg、Hudi)

  • 便于历史日志的趋势分析和机器学习

具体应用场景示例

案例:ELT 日志分析管道

原始日志 (JSON/文本)实时处理层 (Kafka)批处理层 (Spark) → 转换为 Parquet云存储 (S3/GCS) → 分区: dt=2024-01-01/查询层 (Athena/Presto)可视化 (Grafana/Tableau)
复制代码

性能对比数据

  • 存储空间:较 JSON 减少 75-90%

  • 查询速度:提升 10-100 倍(取决于查询模式)

  • 扫描数据量:减少 60-95%(列裁剪效果)

注意事项

  1. 不适合场景

  • 高频单行读写(OLTP)

  • 需要流式逐行处理的场景

  • 小文件过多会影响性能

  1. 最佳实践

  • 合理设置文件大小(128MB-1GB)

  • 按时间分区组织数据

  • 选择适当的压缩算法(平衡速度/比率)

Parquet 已成为现代数据湖和日志分析的事实标准格式,特别适合需要长期存储、批量分析和成本优化的日志管理场景。

发布于: 刚刚阅读数: 7
用户头像

东风微鸣

关注

资源共享, 天下为公! 2018-11-08 加入

APM行业认证专家, 容器技术认证专家. 现任中国大地保险PAAS平台架构师. 公众号:东风微鸣技术博客

评论

发布
暂无评论
Apache Parquet 优势与日志应用场景解析_大数据_东风微鸣_InfoQ写作社区