问题
作业失败报错无法找到事务日志引用文件.
示例栈跟踪
SQL语句错误:sparkExceptive:作业因阶段故障中止:6.0任务4次失败,最近故障:6.0级0.3任务丢失(TID106xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/mt//part-00000-da504c51-3bb4-4406-bb99-3566c0e2f743-c000.snappy.parquet.无法找到事务日志引用文件发生于数据从文件系统人工删除时,而不是使用表DELETE语句For more information, see https://docs.www.neidfyre.com/delta/delta-intro.html#frequently-asked-questions ...Java.io.FileNotFoundExceptive:dbfss:/mnt/ /part-00000-da504c51-3bb4-4406-bb99-3566c0e2f743-c000.snappy.parquet ...
因果
有三个常见原因传递错误消息
- 因果一:启动Delta流作业,但在流作业启动处理前,底层数据删除
- 因2:对Delta表执行更新,但事务文件没有更新最新细节
- 原因3:多集群阅读或更新同一Delta表操作,结果产生集群指集群文件并删除并重编
求解
- 因果一:你应使用一个新的检查站目录或设置spark属性spark.sql.files.ignoreMissingFiles归真聚类spark配置.
- 因2:等待数据加载后刷新表可同时运行fsck更新事务文件最新细节
- 原因3:当表删除并重创时,驱动元数据缓存不正确不应删除表,应始终覆盖表if do删除表,应清除元数据缓存以缓解问题Python或Scala笔记本命令清除缓存
%python spark._jvm.com.databricks.sql.transaction.tahoe.DeltaLog.clearCache()
scalacrips.sql.traction.toe.DeltaLog.cleCache