数据文件治理
数据文件治理是对HDFS中的数据文件进行优化管理,提高数据湖表的读写能力。
Iceberg治理
小文件合并
原理说明
Iceberg表的每一次Commit操作,都会创建写入一个新的文件,并且没有主动合并的相关逻辑。
因此用在数据插入/更新比较频繁的实时场景,小文件问题会非常突出。所以我们需要在任务管理处,创建一个小文件合并的周期任务,定期合并小文件,提高数据的查询效率。
配置说明
治理策略:支持Binpack和Sort两种模式
noteBinpack:主动将大文件拆分、小文件合并,最后组成若干个大小差不多的数据文件
Sort(普通排序):在合并数据文件的基础上进行排序,适用于常用单列、列比较少的过滤场景
Sort(Z-order):如果存在常用多列过滤查询的情况,推荐该方式
最小文件数:只有当小文件数量超过这个配置项时,才会实际执行合并任务
过期快照清理
原理说明
Iceberg表的每一次Commit操作,都会生成一个快照数据。如果历史快照过多,会造成表元数据过大,建议定期清理历史不需要用到的快照数据。
配置说明
- 快照过期时间:在定义快照过期时间后,每次执行治理任务时,都会自动删除过期的快照
- 保留快照数:在清理过期快照时,设置需要保留的快照数量(避免全部清理后,万一又想回溯却找不到历史快照,至少为1)
孤儿文件清理
原理说明
在 Spark 和其他分布式处理引擎中,任务或作业失败可能会留下未被表元数据引用的文件,并且通过「过期快照清理」逻辑可能无法清理的文件。该操作存在一定的数据风险,详见:https://iceberg.apache.org/docs/latest/maintenance/
配置说明
- 文件清理时间:假如周期治理设置了每日清理,但是在执行时,如果文件清理时间为72小时,实际也不会执行清理操作。
Hudi治理
小文件合并
原理说明
Hudi表的每一次Commit操作,都会将新增的数据写入log文件。(MOR表)
配置说明
治理策略:支持Sort模式
note不管普通排序还是Z-order排序,只支持单列
过期快照清理
原理说明
Hudi表的每一次Commit操作,都会生成一个快照数据。如果历史快照过多,会造成表元数据过大,建议定期清理历史不需要用到的快照数据。
配置说明
- 需要保存的commit数量:默认10个
- commit保存时间:默认24小时
- 需要保存的文件版本数量:默认5个
Paimon治理
小文件合并
原理说明
Paimon表的每一次CheckPoint操作,都会将新增1~2个snapshot并且CheckPoint时会强制将文件生成在分布式文件系统上,因此导致文件数量越来越,通过Compaction操作合并小文件以减少小文数量提高查询效率。
配置说明
治理策略:支持Sort模式
note- 支持三种排序:Z-order排序、order排序、hilbert排序
- 不管普通排序还是Z-order排序、hilbert排序,只支持单列
过期快照清理
原理说明
Paimon Writer每次提交都会生成一个或两个快照。每个快照可能会添加一些新的数据文件或将一些旧的数据文件标记为已删除。然而,标记的数据文件并没有真正被删除,因为Paimon还支持时间旅行到更早的快照。它们仅在快照过期时被删除。
配置说明
- 保留快照数:待清理快照文件的最少保留1个
孤儿文件清理
原理说明
Paimon Writer数据写入失败而引入孤儿文件的产生,增加了维护的成本。
配置说明
- 文件清理时间:孤儿文件清理最小时间为24小时
平台配置
任务模版:相当于一个治理任务
支持立即治理(一次性实例,立即执行)、预约治理(一次性实例,根据预约时间执行)、周期治理(周期实例,周期定时执行)
自定义治理参数:可提供更灵活多样的治理能力,详细参数可查阅Iceberg官方文档
环境参数:治理任务执行的环境资源配置
任务模版支持开启、关闭。关闭后,相当于保存任务元数据,但是并未提交调度。(立即治理和预约治理这种一次性任务,在执行后都会自动关闭)
任务实例记录:相当于任务实例,记录每次治理任务的运行情况。对于失败的任务,支持查看日志。