美文网首页
排序对parquet 文件大小的影响

排序对parquet 文件大小的影响

作者: shengjk1 | 来源:发表于2023-04-10 15:21 被阅读0次

    背景

    公司 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 5
    38G 针对上一个测试(34G 那个),应用 iceberg 的 z-order 6

    结论

    1. 通过 0 和 1 对比以及Parquet 文件是如何编写的——行组、页面、所需内存和刷新操作
      我们可以知道排序,对于存储的影响还是挺大的,大约可以节省 171G,22%的存储空间
    2. 通过 0 和 2 对比,可以知道 压缩 对于存储空间的节省是立竿见影的,大约可以节省 627G,80%的存储空间
    3. 通过 2,3,4 对比,可以知道全局排序对于节省存储空间也是立竿见影的,大约可以节省 123G,78%

    进一步探究

    1. 为什么压缩可以减少存储空间
      压缩可以节省空间,因为它可以通过减少文件中的冗余信息来缩小文件的大小。在压缩文件时,压缩算法会查找文件中的重复数据,并使用更简短的代码来代替这些重复数据。这样,文件中的数据量就会减少,从而减小文件的大小。

    2. 为什么排序可以减少存储空间
      因为排序可以将相似的值放在一起,从而提供压缩效率( 因为压缩算法通常使用重复数据的概念来压缩数据,可以参考 霍夫曼编码 )
      排序可以减少字典编码的大小,因为它可以使相似的值具有相同的前缀,从而使字典编码可以使用更短的前缀来表示它们。

    3. zstd是 基于哈夫曼编码和字典压缩的思想的 FSE 算法

    更进一步

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

    相关文章

      网友评论

          本文标题:排序对parquet 文件大小的影响

          本文链接:https://www.haomeiwen.com/subject/gtcwddtx.html