| 问题 | 文件还在写就被下游读到,产生脏数据 |
|---|---|
| 手法 | 临时目录 + 原子重命名;或 _SUCCESS 标记 |
| 扫描方式 | 定时扫描目录并与已处理清单比对 |
原子落地约定
原子落地约定
1) 可写方先写 /landing/_tmp/orders_20261011.csv
2) 写完后 rename 到 /landing/orders/orders_20261011.csv
同一文件系统内 rename 是原子操作
3) 下游只扫描正式目录,看到文件即视为完整Spark 写入的 _SUCCESS 标记
Spark 写入的 _SUCCESS 标记
Hive/Spark 写目录完成后会在目录内生成 _SUCCESS 文件;
调度判断该文件存在再触发下游,可避免半写入被消费。处理完的文件要归档或记录清单,否则轮询会重复处理同一批文件。