事務日誌中引用一個文件無法找到

事務日誌中引用一個文件無法找到。這發生在手動數據從文件係統中刪除表,而不是使用“刪除”聲明。

寫的亞當Pavlacka

去年發表在:2022年5月10日

問題

你的工作失敗,並顯示一條消息:事務日誌中引用一個文件無法找到

堆棧跟蹤:

錯誤的SQL語句:SparkException:工作階段失敗而終止:任務0階段6.0失敗了4次,最近的失敗:在舞台上失去了任務0.3 6.0 (TID 106 XXX.XXX.XXX。XXX,遺囑執行人0):com.databricks.sql.io。FileReadException:讀取文件時錯誤dbfs: / mnt / <路徑> /部分- 00000 - da504c51 - 3 -所以- 4406 - bb99 - 3566 - c0e2f743 c000.snappy.parquet。事務日誌中引用一個文件無法找到。這發生在手動數據從文件係統中刪除表,而不是使用“刪除”聲明。有關更多信息,請參見https://docs.m.eheci.com/delta/delta-intro.html常見問題……引起的:java。FileNotFoundException: dbfs: / mnt / <路徑> /部分- 00000 - da504c51 - 3 -所以- 4406 - bb99 - 3566 - c0e2f743 c000.snappy。拚花……

導致

有三種常見的原因為這個錯誤消息。

  • 原因1:你開始三角洲流工作,但流媒體工作開始前處理、底層數據被刪除。
  • 原因2:你三角洲表進行更新,但事務文件沒有更新最新的細節。
  • 原因3多集群:你嚐試讀取或更新操作在同一δ表,導致集群指文件刪除並重新創建一個集群。

解決方案

  • 原因1:你應該使用一個新的檢查點目錄,或設置火花屬性spark.sql.files.ignoreMissingFiles真正的集群中火花配置
  • 原因2:等待數據加載,然後刷新表。您還可以運行fsck更新事務文件的最新細節。
刪除

信息

fsck刪除任何文件條目在底層文件係統不能發現從三角洲的事務日誌表。

  • 原因3:當表被刪除並重新創建,元數據緩存的司機是不正確的。你不應該刪除一個表,你應該總是覆蓋一個表。如果你刪除一個表,你應該清楚的元數據緩存來緩解這個問題。您可以使用Python或Scala筆記本命令來清除緩存。
% python spark._jvm.com.databricks.sql.transaction.tahoe.DeltaLog.clearCache ()
% scala com.databricks.sql.transaction.tahoe.DeltaLog.clearCache ()


這篇文章有用嗎?