LakeSoul数据仓库生命周期管理与冗余数据清理指南
概述
在数据仓库的实际应用中,有效管理数据生命周期和清理冗余数据是至关重要的运维工作。LakeSoul作为一个高性能的湖仓一体框架,从2.4.0版本开始提供了完善的数据生命周期管理功能,帮助用户自动化处理过期数据和冗余数据,从而优化存储空间并降低成本。
核心概念解析
数据生命周期管理
数据生命周期管理是指根据业务需求为数据设置合理的保留期限,自动清理过期数据。这类似于我们日常生活中定期清理过期食品或文件的概念。
冗余数据
在实时更新的表中,每次执行压缩(compaction)操作都会生成新的压缩文件,这些新文件已经包含了所有历史数据,因此之前的历史压缩文件就成为了冗余数据。这就像我们保存文档的不同版本,当有了最终版后,中间的修改版本就变得多余。
手动清理冗余数据
对于需要立即清理的场景,LakeSoul提供了手动触发清理的选项:
// 在执行压缩操作时开启清理开关
LakeSoulTable.forPath(tablePath).compaction(true)
这个操作会清理旧的压缩文件数据,默认情况下清理功能是关闭的(false)。
自动化生命周期管理
LakeSoul提供了两种表属性配置来实现自动化管理:
1. 分区生命周期配置 (partition.ttl)
- 单位:天
- 功能:当分区的最新提交记录超过设定的天数时,该分区数据将被自动删除
- 特殊情况:如果表中所有分区都过期,相当于执行了truncate操作
2. 冗余数据生命周期配置 (compaction.ttl)
- 单位:天
- 功能:清理分区中的冗余数据,保留指定天数内的数据
- 目的:确保在保留期内,快照读取和增量读取都有效
配置方法详解
写入数据时配置
val df = Seq(("2021-01-01",1,"rice"),("2021-01-01",2,"bread")).toDF("date","id","name")
df.write
.mode("append")
.format("lakesoul")
.option("rangePartitions","date")
.option("hashPartitions","id")
.option("partition.ttl",365) // 设置分区生命周期为1年
.option("compaction.ttl",3) // 设置冗余数据保留3天
.option("hashBucketNum","2")
.save(tablePath)
SQL语句配置
-- Spark SQL
CREATE TABLE table (id INT, data STRING) USING lakesoul
TBLPROPERTIES ('partition.ttl'='365', 'compaction.ttl'='7')
-- Flink SQL
CREATE TABLE `lakesoul`.`default`.test_table (
`id` INT,
data STRING,
PRIMARY KEY (`id`,`name`) NOT ENFORCED
) WITH (
'connector'='lakesoul',
'hashBucketNum'='4',
'use_cdc'='true',
'partition.ttl'='365',
'compaction.ttl'='7',
'path'='file:///tmp/lakesoul/flink/sink/test'
);
通过API动态配置
// 设置生命周期
LakeSoulTable.forPath(tablePath)
.setPartitionTtl(128)
.setCompactionTtl(10)
// 取消配置
LakeSoulTable.forPath(tablePath).cancelPartitionTtl()
LakeSoulTable.forPath(tablePath).cancelCompactionTtl()
自动化清理任务
LakeSoul提供了Spark作业实现全库过期数据的自动清理:
./bin/spark-submit \
--name clean_redundant_data \
--master yarn \
--deploy-mode cluster \
--executor-memory 3g \
--executor-cores 1 \
--num-executors 20 \
--class com.dmetasoul.lakesoul.spark.clean.CleanExpiredData \
jars/lakesoul-spark-3.3-VAR::VERSION.jar
建议将此任务设置为每日定时执行,以实现自动化运维。
最佳实践建议
- 合理设置生命周期:根据业务需求和数据重要性设置合理的保留期限
- 监控存储变化:在启用自动清理后,定期监控存储使用情况
- 测试验证:在生产环境大规模应用前,先在测试环境验证配置效果
- 组合使用:可以同时使用手动清理和自动清理功能,满足不同场景需求
通过合理配置LakeSoul的生命周期管理功能,可以显著降低存储成本,同时确保数据的有效性和可访问性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考