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