Apache Parquet 优势与日志应用场景解析
本文最后更新于:2025年12月23日 上午
写作背景
近期看了几篇关于日志解决方案的文章,发现它们都在使用 Apache Parquet 作为存储文件格式。如下:
- Yelp 发布大规模管理 S3 服务器访问日志的方案_架构_InfoQ 精选文章
- Cloudflare Log Explorer is now GA, providing native observability and forensics
- 逆势降本:云上数据平台年复削减 30% 的治理实践_云计算_吴建阳_InfoQ 精选文章
- Object Storage Is All You Need - Justin Cormack, Docker
- 讲真,OpenObserve 挺好用的!
- AWS Debuts a Distributed SQL Database, Amazon S3 Tables for Iceberg - The New Stack
- Grafana Tempo 2.5 release: vParquet4, streaming endpoints, and more metrics | Grafana Labs
- 对象存储应用:云原生最新架构 - The New Stack — Object Store Apps: Cloud Native’s Freshest Architecture - The New Stack
这勾起了我的好奇心:
- Apache Parquet 是什么?
- 有什么优势?
- 什么软件可以处理 Apache Parquet?
- 近期发现很多日志解决方案会将日志转换为 Apache Parquet, 为什么要这样处理,有什么优势?
Apache Parquet 简介
Apache Parquet 是一种开源的列式存储文件格式,专门为大数据处理框架设计,最初由 Twitter 和 Cloudera 联合开发,现为 Apache 顶级项目。
核心优势
1. 列式存储结构
- 与传统行式存储不同,Parquet 按列存储数据
- 查询时只需读取相关列,大幅减少 I/O
- 示例对比:
1 | |
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
日志解决方案
- Cloudflare Log Explorer
- OpenObserve
- Grafana Tempo
- Yelp
- AWS 官方参考架构: Extracting key insights from Amazon S3 access logs with AWS Glue for Ray | AWS Big Data Blog
日志解决方案转用 Parquet 的原因
1. 成本效益
1 | |
- 存储成本降低 70-90%
- 网络传输成本显著降低
2. 查询性能提升
1 | |
3. 适合时序数据分析
- 日志数据天然具有时间属性
- Parquet 支持按时间分区,优化时间范围查询
- 结合分区剪枝(Partition Pruning)大幅提升性能
4. 兼容现代数据栈
1 | |
5. 长期存储和分析
- Parquet 是分析型工作负载的理想格式
- 支持数据湖架构(Delta Lake、Iceberg、Hudi)
- 便于历史日志的趋势分析和机器学习
具体应用场景示例
案例:ELT 日志分析管道
1 | |
性能对比数据
- 存储空间:较 JSON 减少 75-90%
- 查询速度:提升 10-100 倍(取决于查询模式)
- 扫描数据量:减少 60-95%(列裁剪效果)
注意事项
-
不适合场景:
- 高频单行读写(OLTP)
- 需要流式逐行处理的场景
- 小文件过多会影响性能
-
最佳实践:
- 合理设置文件大小(128MB-1GB)
- 按时间分区组织数据
- 选择适当的压缩算法(平衡速度 / 比率)
Parquet 已成为现代数据湖和日志分析的事实标准格式,特别适合需要长期存储、批量分析和成本优化的日志管理场景。
Apache Parquet 优势与日志应用场景解析
https://ewhisper.cn/posts/9939/