
# 写Hudi同步过程中报错，错误信息包含"HoodieException: Duplicate fileID"怎么办？
#### 问题描述
写Hudi，Hudi表索引类型为BUCKET，作业进入"运行中"后报错，jobmanager、taskmanager中均有报错关键字"HoodieException: Duplicate fileID"。
图1报错信息   
![](https://support.huaweicloud.com/dataartsstudio_faq/zh-cn_image_0000002392104825.png "点击放大")
查看Hudi表目录，可以看到问题分区下相同桶ID对应不同的FileID。
图2Hudi表文件   
![](https://support.huaweicloud.com/dataartsstudio_faq/zh-cn_image_0000002358640396.png "点击放大")
#### 原因分析
BUCKET索引的Hudi FileGroupId由 桶ID+UUID组成，桶ID与UUID一一对应，当有新的数据被写入到这个分区，发现一个桶ID对应多个UUID时会报错Duplicate fileID，表示Hudi表目录下有脏数据。
可能导致脏数据的原因：
- 存在多个进程（Spark/Flink）同一时刻写了这张Hudi表。
- 低版本MRS集群，通过Spark SQL的"insert overwrite"语法和"insert into xxx select \* from"语法写Hudi表后，有概率在目录下留下脏数据文件。
- 历史文件残留，或者有文件搬迁作业将脏数据文件直接搬迁到了目录下。
 
#### 解决方案
1. 数据备份。 
   通过OBS完成分区下数据备份，准备手动删除Hudi表路径下的脏数据。
   
   

2. 确认脏数据。 
   - 对于[图3]的冲突文件，在Hudi表的.hoodie目录下分别搜索这两个文件的commit时间，即文件名末尾的时间戳【20250326094529742】和【20250326172153881】。
   
   
   能搜到的deltacommit文件的即为正常数据文件，搜不到时间戳的即为脏数据，脏数据文件手动删除即可。
   图3查找冲突文件   
   ![](https://support.huaweicloud.com/dataartsstudio_faq/zh-cn_image_0000002358984438.png "点击放大")
   
   图4确认是否清除冲突文件   
   ![](https://support.huaweicloud.com/dataartsstudio_faq/zh-cn_image_0000002392464421.png "点击放大")
   
   - 两个时间戳都搜不到关联commit，那可能是commit文件已经被归档，需要将.hoodie/archive目录下的归档文件下载下来，通过vi命令搜索，同样的，能搜索到commit记录的为正常数据文件，搜索不到commit记录的是脏数据文件，需要手动删除。
     图5查看Hudi commit归档文件   
     ![](https://support.huaweicloud.com/dataartsstudio_faq/zh-cn_image_0000002358824538.png "点击放大")
     
     图6通过vi命令查看Hudi commit归档文件   
     ![](https://support.huaweicloud.com/dataartsstudio_faq/zh-cn_image_0000002509598819.png "点击放大") 
   
   
   
   
3. 手动删除脏数据文件。 
   在本案例中，[图2]所展示的两个冲突文件，00000000-3d29-44d4-b603-47c36a23d406_1-12-45_20250326094529742.parquet文件可以搜索到关联的commit记录（20250326094529742），为正常的数据文件，需要被保留；
   00000000-419f-4468-a249-ca6c3c86b1db-00_0-6-16_20250326172153881.parquet无法搜索到与时间戳20250326172153881关联的commit记录，为脏数据文件，需要被删除。
   用户可以登录到OBS，手动删除脏数据文件。
   
   
 
