# CleanInvalidFiles工具
#### 功能说明
清理未归档事务时间内产生的无效文件（即磁盘上存在但未被任何已完成commit/deltacommit/replacecommit引用的孤立数据文件）。
#### 约束
- 支持COW和MOR表。
- 只能清理未归档事务时间内产生的无效文件。开启spark.hudi.check.archived.timeline=true可扩大检查范围至归档时间线。
- 工具执行时，如有写入操作正在运行，则可能因为任务未正式提交会把正在写入任务产生的文件识别为无效文件。
 
#### 命令格式
```
spark-submit \
--master yarn \
--driver-memory 2G \
--num-executors 3 \
--executor-memory 4G \
--class com.huawei.mrs.hudi.tools.CleanInvalidFiles \
/opt/hudi-fix-tools-1.0.jar \
${命令} ${库名.表名} [${分区}]
```
#### 参数说明
| **参数**   | **是否必选** | **参数说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
|:---|:---|:---|
| ${命令}    | 是        | - check：检测并输出无效文件列表。  - fix：备份并清理无效文件。  - restore：对备份文件进行恢复，恢复到清理前的状态。  - cleanbackup：删除备份文件。   |
| ${库名.表名} | 是        | 需要处理的Hudi表名，格式为库名.表名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| ${分区}    | 否        | 逗号分隔的分区路径列表，如col0=100/col1=sd,col0=101/col1=ab。不输入则处理所有分区。非分区表不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   
#### 输出结果说明
| **字段**  | **说明**                      |
|:---|:---|
| RESULT  | success表示执行成功，failed表示执行失败。 |
| MESSAGE | 检测到的无效文件列表、执行结果信息或执行失败信息。   |
   
#### 使用样例
- 检查所有分区中的无效文件：
  ```
  spark-submit --master yarn --driver-memory 2G --num-executors 3 --executor-memory 4G \
  --class com.huawei.mrs.hudi.tools.CleanInvalidFiles \
  /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.CleanInvalidFiles \
  /opt/hudi-fix-tools-1.0.jar \
  check mydb.mytable "region=east/city=shanghai,region=east/city=beijing"
  ```
  
- 清理无效文件（自动备份）：
  ```
  spark-submit --master yarn --driver-memory 2G --num-executors 3 --executor-memory 4G \
  --class com.huawei.mrs.hudi.tools.CleanInvalidFiles \
  /opt/hudi-fix-tools-1.0.jar \
  fix mydb.mytable
  ```
  
- 同时扫描归档时间线检查无效文件：
  ```
  spark-submit --master yarn --driver-memory 2G --num-executors 3 --executor-memory 4G \
  --conf spark.hudi.check.archived.timeline=true \
  --class com.huawei.mrs.hudi.tools.CleanInvalidFiles \
  /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.CleanInvalidFiles \
  /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.CleanInvalidFiles \
  /opt/hudi-fix-tools-1.0.jar \
  cleanbackup mydb.mytable
  ```
  
 
