A tranzakciónaplóban hivatkozott fájl nem található

Probléma

A feladat egy hibaüzenettel meghiúsul: A file referenced in the transaction log cannot be found.

Példa a verem követésére:

Error in SQL statement: SparkException: Job aborted due to stage failure: Task 0 in stage 6.0 failed 4 times, most recent failure: Lost task 0.3 in stage 6.0 (TID 106, XXX.XXX.XXX.XXX, executor 0): com.databricks.sql.io.FileReadException: Error while reading file dbfs:/mnt/<path>/part-00000-da504c51-3bb4-4406-bb99-3566c0e2f743-c000.snappy.parquet. A file referenced in the transaction log cannot be found. This occurs when data has been manually deleted from the file system rather than using the table `DELETE` statement. For more information, see https://docs.databricks.com/delta/delta-intro.html#frequently-asked-questions ... Caused by: java.io.FileNotFoundException: dbfs:/mnt/<path>/part-00000-da504c51-3bb4-4406-bb99-3566c0e2f743-c000.snappy.parquet ...

Ok

A hibaüzenetnek három gyakori oka van.

  • 1. ok:Elindítja a Delta-streamelési feladatot, de a streamelési feladat feldolgozása előtt a mögöttes adatok törlődnek.
  • 2. ok:Ön végzi el a Delta-tábla frissítéseit, de a tranzakciós fájlok nem frissülnek a legújabb adatokkal.
  • 3. ok:Több fürtből álló olvasási vagy frissítési műveleteket kísérel meg ugyanazon a Delta-táblán, ami azt eredményezi, hogy egy fürt egy törölt és újból létrehozandó fürtön lévő fájlokra hivatkozik.

Megoldás

  • 1. ok:Használjon egy új ellenőrzőpont-könyvtárat, vagy állítsa a Spark tulajdonságot a következőre a fürt truetrue.
  • 2. ok:Várja meg az adatok betöltését, majd frissítse a táblát. A futtatásával fsck frissítheti a tranzakciós fájlokat a legfrissebb adatokkal.

Megjegyzés

fsck eltávolít minden olyan fájlbejegyzést, amely nem található a mögöttes fájlrendszerben a Delta-tábla tranzakciónaplójában.

  • 3. ok:A táblák törlése és újbóli létrehozása után az illesztő metaadat-gyorsítótára helytelen. Táblát ne töröljön, mindig írja felül a táblát. Ha töröl egy táblát, a probléma megoldásához törölje a metaadat-gyorsítótárat. Python- vagy Scala-notebookparancs használatával kiürítheti a gyorsítótárat.
spark._jvm.com.databricks.sql.transaction.tahoe.DeltaLog.clearCache()
com.databricks.sql.transaction.tahoe.DeltaLog.clearCache()