司马黛 发表于 2025-12-23 14:00:04

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

写作背景

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

[*]Yelp 发布大规模管理 S3 服务器访问日志的方案_架构_InfoQ精选文章
[*]Cloudflare Log Explorer is now GA, providing native observability and forensics
[*]逆势降本:云上数据平台年复削减30%的治理实践_云计算_吴建阳_InfoQ精选文章
[*]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
[*]示例对比:
行式存储:Row1, Row2, ...
列式存储: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
日志解决方案


[*]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. 成本效益

# 示例:日志存储成本对比

原始 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/O3. 适合时序数据分析


[*]日志数据天然具有时间属性
[*]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%(列裁剪效果)
注意事项


[*]不适合场景:

[*]高频单行读写(OLTP)
[*]需要流式逐行处理的场景
[*]小文件过多会影响性能

[*]最佳实践:

[*]合理设置文件大小(128MB-1GB)
[*]按时间分区组织数据
[*]选择适当的压缩算法(平衡速度/比率)

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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

筒霓暄 发表于 2025-12-26 10:01:08

感谢分享,下载保存了,貌似很强大

这帜 发表于 2026-1-5 15:02:31

新版吗?好像是停更了吧。

酝垓 发表于 2026-1-21 14:27:17

收藏一下   不知道什么时候能用到

尚腱埂 发表于 2026-1-22 20:30:15

热心回复!

凳舒 发表于 2026-1-23 00:08:03

新版吗?好像是停更了吧。

喜及眩 发表于 2026-1-23 04:05:42

过来提前占个楼

羊夏菡 发表于 2026-1-26 09:19:22

过来提前占个楼

呵烘稿 发表于 2026-1-27 02:49:03

感谢分享

庾芷秋 发表于 2026-1-29 08:13:05

很好很强大我过来先占个楼 待编辑

寇油 发表于 2026-2-5 08:49:27

感谢分享,学习下。

吉芷雁 发表于 2026-2-6 04:12:07

不错,里面软件多更新就更好了

呵烘稿 发表于 2026-2-6 04:54:42

yyds。多谢分享

轧岔 发表于 2026-2-7 10:12:34

前排留名,哈哈哈

鄂缮输 发表于 2026-2-8 16:02:01

谢谢分享,辛苦了

恙髡 发表于 2026-2-9 05:23:31

喜欢鼓捣这些软件,现在用得少,谢谢分享!

士沌 发表于 2026-2-10 11:58:04

很好很强大我过来先占个楼 待编辑

祖娅曦 发表于 2026-2-11 12:16:48

yyds。多谢分享

后仲舒 发表于 2026-2-11 21:00:00

东西不错很实用谢谢分享

匡菲 发表于 2026-2-11 23:42:03

很好很强大我过来先占个楼 待编辑
页: [1] 2
查看完整版本: Apache Parquet 优势与日志应用场景解析