首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >排序对parquet 文件大小的影响

排序对parquet 文件大小的影响

作者头像
shengjk1
发布2025-05-16 11:10:26
发布2025-05-16 11:10:26
1040
举报
文章被收录于专栏:码字搬砖码字搬砖

背景

公司 hive数仓全面迁移到 iceberg后,发现存储空间比 hive 要大,并且文件格式都是 parquet

分析

iceberg存储空间比 hive 表大,最主要的原因是因为压缩算法不一样,然后也发现 iceberg 的 z-order 对存储空间有显著的降低

测试(离线,对一整天的数据测试)

数据大小

场景

序号

784G

不压缩,不排序

0

613G

不压缩,全局排序

1

157G

zstd压缩,不排序

2

149G

zstd压缩,局部排序( sort by )

3

34G

zstd压缩,全局排序

4

35G

针对上一个测试(34G 那个),应用 iceberg 的 bin pack rewrite-all=true

5

38G

针对上一个测试(34G 那个),应用 iceberg 的 z-order rewrite-all=true

6

38G

针对上一个测试(34G 那个),应用 iceberg 的 z-order rewrite-all=false,但存储要比 6 稍微大一些

6.1

48.446G

zstd压缩,应用 iceberg 的 z-order rewrite-all=false

7

48.443G

zstd压缩,应用 iceberg 的 z-order rewrite-all=true

8

结论

  1. 通过 0 和 1 对比以及Parquet 文件是如何编写的——行组、页面、所需内存和刷新操作 我们可以知道排序,对于存储的影响还是挺大的,大约可以节省 171G,22%的存储空间
  2. 通过 0 和 2 对比,可以知道 压缩 对于存储空间的节省是立竿见影的,大约可以节省 627G,80%的存储空间
  3. 通过 2,3,4 对比,可以知道全局排序对于节省存储空间也是立竿见影的,大约可以节省 123G,78%
  4. 也取决于文件大小和小文件多少,文件越大小文件越小,压缩比越高
  5. 7 和 8,以及6 和 6.1 相比,理论上来说 8 的压缩性能比 7要好,但测试发现基本相同,源于文件大小超过了设置值,不需要再合并了 ,此时 rewrite-all=false 和 rewrite-all=true 是差不多的
  6. 6 和8 相比,可见排序后再 z-order 压缩比要比直接 z-order 要好

进一步探究

  1. 为什么压缩可以减少存储空间 压缩可以节省空间,因为它可以通过减少文件中的冗余信息来缩小文件的大小。在压缩文件时,压缩算法会查找文件中的重复数据,并使用更简短的代码来代替这些重复数据。这样,文件中的数据量就会减少,从而减小文件的大小。
  2. 为什么排序可以减少存储空间 因为排序可以将相似的值放在一起,从而提供压缩效率( 因为压缩算法通常使用重复数据的概念来压缩数据,可以参考 霍夫曼编码 ) 排序可以减少字典编码的大小,因为它可以使相似的值具有相同的前缀,从而使字典编码可以使用更短的前缀来表示它们。
  3. zstd是 基于哈夫曼编码和字典压缩的思想的 FSE 算法
  4. 压缩本质是重新编码

更进一步

在有压缩的前提下,排序一定会让存储空间降低吗? 不一定,因为要想通过排序让存储空间降低,则必须将相似的值放在一起,如果数据在排序键上没有很好的分布,那么排序可能会增加文件大小,反之则可以降低文件大小

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 分析
  • 测试(离线,对一整天的数据测试)
  • 结论
  • 进一步探究
  • 更进一步
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档