更新时间:2026-10-30 GMT+08:00
分享

CleanFailedTransactions工具

功能说明

清理Hudi表中失败的(心跳过期的inflight)事务。检测心跳已过期的inflight instant,并清理对应的instant文件、数据文件、心跳文件和.temp临时目录。适用于Hudi正常rollback无法清理的残留失败事务。

约束

  • 支持COW和MOR表。
  • 工具会跳过非Hudi表和外部表。
  • 工具执行时,如有写入操作正在运行,可能将正在进行的写入误判为失败事务。

命令格式

spark-submit \
--master yarn \
--driver-memory 2G \
--num-executors 3 \
--executor-memory 4G \
--class com.huawei.mrs.hudi.tools.CleanFailedTransactions \
/opt/hudi-fix-tools-1.0.jar \
${命令} "${表列表}"

参数说明

参数

是否必选

参数说明

${命令}

是

  • check:检测并输出失败的inflight事务及需要清理的文件。
  • rollback:备份并清理失败的inflight事务(包括instant文件、数据文件、心跳文件、.temp/{instantTime}目录)。
  • restore:对备份文件进行恢复,恢复到清理前的状态。
  • cleanbackup:删除备份文件。

${表列表}

是

两种输入方式:

  1. 逗号分隔的库名.表名列表(如db1.t1,db2.t2)。
  2. 保存表列表的文件路径,文件内容每行一张表,格式为库名.表名。

工具优先尝试作为文件路径读取,读取失败则按逗号分隔解析。自动跳过非Hudi表和外部表。

Spark配置项

配置项

默认值

说明

spark.hudi.force.clean.noSubsequentWrites

false

是否清理没有后续已完成写入的失败事务。默认只清理有后续已完成写入确认失败的过期事务(保守策略);设为true时,也会清理没有后续已完成写入的过期事务(需确认没有正在进行的写入)。

输出结果说明

字段

说明

RESULT

success表示执行成功,failed表示执行失败

MESSAGE

检测到的失败事务信息、需要清理的文件列表、执行结果信息或执行失败信息

使用样例

  • 检查单张表的失败事务:
    spark-submit --master yarn --driver-memory 2G --num-executors 3 --executor-memory 4G \
    --class com.huawei.mrs.hudi.tools.CleanFailedTransactions \
    /opt/hudi-fix-tools-1.0.jar \
    check "mydb.mytable"
  • 检查多张表的失败事务:
    spark-submit --master yarn --driver-memory 2G --num-executors 3 --executor-memory 4G \
    --class com.huawei.mrs.hudi.tools.CleanFailedTransactions \
    /opt/hudi-fix-tools-1.0.jar \
    check "mydb.table1,mydb.table2"
  • 从文件读取表列表进行检查:
    spark-submit --master yarn --driver-memory 2G --num-executors 3 --executor-memory 4G \
    --class com.huawei.mrs.hudi.tools.CleanFailedTransactions \
    /opt/hudi-fix-tools-1.0.jar \
    check "/tmp/table_list.txt"
  • 清理失败事务(自动备份):
    spark-submit --master yarn --driver-memory 2G --num-executors 3 --executor-memory 4G \
    --class com.huawei.mrs.hudi.tools.CleanFailedTransactions \
    /opt/hudi-fix-tools-1.0.jar \
    rollback "mydb.mytable"
  • 清理没有后续写入的失败事务(需确认无正在进行的写入):
    spark-submit --master yarn --driver-memory 2G --num-executors 3 --executor-memory 4G \
    --conf spark.hudi.force.clean.noSubsequentWrites=true \
    --class com.huawei.mrs.hudi.tools.CleanFailedTransactions \
    /opt/hudi-fix-tools-1.0.jar \
    rollback "mydb.mytable"
  • 恢复备份:
    spark-submit --master yarn --driver-memory 2G --num-executors 3 --executor-memory 4G \
    --class com.huawei.mrs.hudi.tools.CleanFailedTransactions \
    /opt/hudi-fix-tools-1.0.jar \
    restore "mydb.mytable"
  • 清理备份:
    spark-submit --master yarn --driver-memory 2G --num-executors 3 --executor-memory 4G \
    --class com.huawei.mrs.hudi.tools.CleanFailedTransactions \
    /opt/hudi-fix-tools-1.0.jar \
    cleanbackup "mydb.mytable"

相关文档