S3 StreamingFileSink FileNotFoundExceptions - Managed Service für Apache Flink

Amazon Managed Service für Apache Flink war zuvor als Amazon Kinesis Data Analytics für Apache Flink bekannt.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

S3 StreamingFileSink FileNotFoundExceptions

Anwendungen, die Managed Service für Apache Flink nutzen, können beim Starten von Snapshots auf den Fehler FileNotFoundException einer Teildatei in Bearbeitung stoßen, wenn eine in Bearbeitung befindliche Teildatei fehlt, auf die ihr Savepoint verweist. Wenn dieser Fehlermodus eintritt, ist der Operatorstatus der Anwendung, die Managed Service für Apache Flink nutzt, normalerweise nicht wiederherstellbar und muss ohne Verwendung eines Snapshots mittels SKIP_RESTORE_FROM_SNAPSHOT neu gestartet werden. Sehen Sie sich den folgenden beispielhaften Stacktrace an:

java.io.FileNotFoundException: No such file or directory: s3://amzn-s3-demo-bucket/pathj/INSERT/2023/4/19/7/_part-2-1234_tmp_12345678-1234-1234-1234-123456789012 at org.apache.hadoop.fs.s3a.S3AFileSystem.s3GetFileStatus(S3AFileSystem.java:2231) at org.apache.hadoop.fs.s3a.S3AFileSystem.innerGetFileStatus(S3AFileSystem.java:2149) at org.apache.hadoop.fs.s3a.S3AFileSystem.getFileStatus(S3AFileSystem.java:2088) at org.apache.hadoop.fs.s3a.S3AFileSystem.open(S3AFileSystem.java:699) at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:950) at org.apache.flink.fs.s3hadoop.HadoopS3AccessHelper.getObject(HadoopS3AccessHelper.java:98) at org.apache.flink.fs.s3.common.writer.S3RecoverableMultipartUploadFactory.recoverInProgressPart(S3RecoverableMultipartUploadFactory.java:97) ...

Flink StreamingFileSink schreibt Datensätze in Dateisysteme, die von den Dateisystemen unterstützt werden. Da die eingehenden Streams unbegrenzt sein können, werden die Daten in Teildateien endlicher Größe organisiert, wobei beim Schreiben der Daten neue Dateien hinzugefügt werden. Der Teil-Lebenszyklus und die Rollover-Richtlinie bestimmen den Zeitpunkt, die Größe und die Benennung der Teildateien.

Beim Checkpointing und Savepointing (Snapshotting) werden alle ausstehenden Dateien umbenannt und festgeschrieben. Teildateien, die sich in Bearbeitung befinden, werden jedoch nicht festgeschrieben, sondern umbenannt, und ihr Verweis wird in den Checkpoint- oder Savepoint-Metadaten gespeichert, die bei der Wiederherstellung von Aufträgen verwendet werden. Diese Teildateien, die sich in Bearbeitung befinden, werden irgendwann in den Status Ausstehend verschoben, umbenannt und von einem nachfolgenden Checkpoint oder Savepoint festgeschrieben.

Im Folgenden sind die Hauptursachen und Abhilfemaßnahmen für fehlende Teildateien in Bearbeitung aufgeführt:

  • Veralteter Snapshot, der zum Starten der Managed Service for Apache Flink-Anwendung verwendet wurde — nur der letzte System-Snapshot, der beim Beenden oder Aktualisieren einer Anwendung erstellt wurde, kann verwendet werden, um eine Managed Service for Apache Flink-Anwendung mit Amazon S3 zu starten. StreamingFileSink Um diese Art von Fehlern zu vermeiden, verwenden Sie den neuesten System-Snapshot.

    • Dies ist beispielsweise der Fall, wenn Sie während des Stopps oder der Aktualisierung einen Snapshot auswählen, der mit CreateSnapshot statt mit einem vom System ausgelösten Snapshot erstellt wurde. Der Savepoint des älteren Snapshots enthält einen out-of-date Verweis auf die in Bearbeitung befindliche Teildatei, die umbenannt und von einem nachfolgenden Checkpoint oder Savepoint übernommen wurde.

    • Dies kann auch passieren, wenn ein vom System ausgelöster Snapshot ausgewählt wird, der nicht beim letzten Anhalten/Aktualisieren-Ereignis ausgelöst wurde. Ein Beispiel ist eine Anwendung, bei der der System-Snapshot deaktiviert, aber RESTORE_FROM_LATEST_SNAPSHOT konfiguriert wurde. Im Allgemeinen StreamingFileSink sollte bei Managed Service für Apache Flink-Anwendungen mit Amazon S3 immer der System-Snapshot aktiviert und RESTORE_FROM_LATEST_SNAPSHOT konfiguriert sein.

  • Teildatei in Bearbeitung entfernt – Da sich die in Bearbeitung befindliche Teildatei in einem S3-Bucket befindet, kann sie von anderen Komponenten oder Akteuren, die Zugriff auf den Bucket haben, entfernt werden.

    • Dies kann passieren, wenn Sie Ihre App zu lange angehalten haben und die Datei „In Bearbeitung“, auf die sich der Savepoint Ihrer App bezieht, durch die S3-Bucket-Lebenszyklusrichtlinie entfernt wurde. MultiPartUpload Um diese Art von Fehlern zu vermeiden, stellen Sie sicher, dass Ihre MPU S3-Bucket-Lebenszyklusrichtlinie einen ausreichend langen Zeitraum für Ihren Anwendungsfall abdeckt.

    • Dies kann auch passieren, wenn die Teildatei in Bearbeitung manuell oder durch eine andere Komponente Ihres Systems entfernt wurde. Um diese Art von Fehlern zu vermeiden, stellen Sie bitte sicher, dass die in Bearbeitung befindlichen Teildateien nicht von anderen Akteuren oder Komponenten entfernt werden.

  • Wettlaufsituation, bei der nach dem Savepoint ein automatisierter Checkpoint ausgelöst wird – dies betrifft Versionen von Managed Service für Apache Flink bis einschließlich 1.13. Dieses Problem wurde in Managed Service für Apache Flink Version 1.15 behoben. Migrieren Sie Ihre Anwendung auf die neueste Version von Managed Service für Apache Flink, um ein erneutes Auftreten zu verhindern. Wir empfehlen auch die Migration von nach. StreamingFileSink FileSink

    • Wenn Anwendungen angehalten oder aktualisiert werden, löst Managed Service für Apache Flink einen Savepoint aus und hält die Anwendung in zwei Schritten an. Wenn zwischen den beiden Schritten ein automatisierter Checkpoint ausgelöst wird, ist der Savepoint unbrauchbar, da seine in Bearbeitung befindliche Teildatei umbenannt und möglicherweise festgeschrieben würde.