实战业务场景,频繁的rewrite、mergeInto等产生大量新的replace/overwrite snapshot,会导致iceberg表的实际存储数据大量冗余,进而导致iceberg表实际磁盘存储占用急速膨胀,需要根据实际业务场景进行历史snapshot的expire操作
数据冗余现象
描述:
由于生产环境要求亚秒至分钟级别的数据实效性,同时要满足下游 亚秒级 ad-hoc查询与多维分析,所以需要进行频繁的小文件rewrite操作,从而导致单表的实际存储急速膨胀
数据冗余分析
从示意图中,可以看出
数据冗余原理
如何应对snap数据冗余膨胀?
So,我们需要根据实际业务场景进行历史snap的expire工作
Expire操作的两种模式
PS:当前(2021年2月)社区spark api的retainLast和oldThan两种策略结果与预期在一定的差异,且是单并发,执行性能不是很好,需要进行一定的二次开发,增加并发度
Stored procedures are only available when using Iceberg SQL extensions in Spark 3.x.
CALL hive_prod.system.expire_snapshots('db.sample', TIMESTAMP '2021-06-30 00:00:00.000', 100)
https://iceberg.apache.org/docs/latest/spark-procedures/#expire_snapshots实战优化效果
从示意图可以看出
| 留言与评论(共有 0 条评论) “” |