Mit der Dienstoption „Bei Fehler pausieren“ können Sie den Status Ihrer Dataflow-Batchjobs beibehalten. Mit dieser Funktion können Sie die Jobausführung pausieren, Probleme beheben, die außerhalb der Pipeline liegen, und die Verarbeitung fortsetzen, ohne abgeschlossene Arbeit zu verlieren. Wenn ein Job mit dieser Funktion pausiert wird, können Sie den Pipelinecode oder die Worker-VM-Konfigurationen wie den Maschinentyp nicht ändern.
Wenn Sie diese Funktion aktivieren, können Sie die Ressourcenkosten besser verwalten und die Zuverlässigkeit von Jobs bei vorübergehenden Ausfällen oder Kontingentbeschränkungen verbessern. Sie können die Kontrolle über den Lebenszyklus Ihrer Pipeline behalten, indem Sie maximale Pausendauern konfigurieren, wenn Sie die Option „Bei Fehler pausieren“ aktivieren. Sie können Pipelines, für die das Flag „Bei Fehler pausieren“ aktiviert ist, auch manuell pausieren oder fortsetzen.
Vorteile der Option „Bei Fehler pausieren“
Mit der Dienstoption „Bei Fehler pausieren“ können Sie den Fortschritt von Batchjobs bei Unterbrechungen beibehalten und so die gesamte Rechenzeit und die Ressourcenausgaben reduzieren.
- Checkpoint-Aufbewahrung:Wenn ein Job fehlschlägt, können Sie ihn ab dem letzten aufgezeichneten Checkpoint fortsetzen, anstatt von vorn zu beginnen. So müssen Sie abgeschlossene Datenblöcke nicht noch einmal verarbeiten und müssen nicht für Arbeit bezahlen, die bereits erfolgreich abgeschlossen wurde.
- Externe Abhängigkeiten minimieren:Schützen Sie Ihre Pipelines vor vorübergehenden Problemen wie vorübergehenden Ausfällen oder Ratenlimits in externen Diensten. Wenn Sie den Job pausieren, haben Sie die Möglichkeit, die Ursache zu beheben, bevor Sie die Ausführung fortsetzen, ohne abgeschlossene Arbeit zu verlieren.
- Nicht deterministische Fehler beheben:Bei Arbeitslasten, die zu zeitweiligen oder nicht deterministischen Fehlern neigen, können Sie mit dieser Option bei jedem sequenziellen Versuch inkrementelle Fortschritte erzielen und so einen vollständigen Jobfehler verhindern.
- Ressourcen und Kontingente verwalten:Pausieren Sie Batchjobs mit niedrigerer Priorität, um vorübergehend Kontingente freizugeben oder hochwertige Ressourcen wie GPUs oder TPUs dringenden Arbeitslasten wie dem Training oder der Inferenz von ML-Modellen zuzuweisen, ohne den bisherigen Fortschritt zu verlieren.
Unterstützung und Einschränkungen
Für das Pausieren eines Jobs (manuell oder bei einem Fehler) gelten die folgenden Anforderungen und Einschränkungen:
- Der Dataflow-Job muss ein Batchjob sein.
- Der Job muss Dataflow Shuffle verwenden.
- Sie müssen die
pause_on_failureDienstoption angeben, wenn Sie denJob ausführen. - Der Job darf zuvor nicht beim Pausieren fehlgeschlagen sein.
Verhalten von Jobs mit der Option „Bei Fehler pausieren“
Wenn Sie die Funktion „Bei Fehler pausieren“ aktivieren, wird Ihr Job automatisch pausiert, nachdem ein Arbeitselement viermal fehlgeschlagen ist. Diese Fehler werden in Ihren Logs
als Jobnachrichten mit Error message from worker und Workernachrichten
mit Completed work item ITEM_NUMBER
UNSUCCESSFULLY identifiziert. Andere Arten von Fehlern wie Ausfälle und Kontingentfehler lösen keine automatische Pause aus. Stattdessen führen diese Fehler dazu, dass der Job wie gewohnt fehlschlägt. Wenn Sie die Option „Bei Fehler pausieren“ aktivieren, können Sie einen Job auch manuell pausieren.
Statusübergänge von Jobs
Wenn ein Dataflow-Job pausiert wird, durchläuft er die folgenden Status:
- Pausing (Wird pausiert): Ein Zwischenstatus, in dem die Verarbeitung des Jobs angehalten, die Worker-VMs gelöscht und der Backend-Status archiviert wird. Die VMs werden Ihnen weiterhin in Rechnung gestellt, bis der Dienst sie vollständig gelöscht hat.
- Paused (Pausiert): Der Job wurde vollständig angehalten. An diesem Punkt werden Ihnen nur archivierte Shuffle-Daten in Rechnung gestellt.
Außergewöhnliches Verhalten
Die Option „Bei Fehler pausieren“ verhält sich in den folgenden Szenarien möglicherweise unerwartet:
- Wenn Sie einen Job manuell pausieren, der kurz vor dem Abschluss steht, wird der Job möglicherweise abgeschlossen, anstatt pausiert zu werden.
- In seltenen Fällen kann es vorkommen, dass ein Job nicht pausiert wird. In diesen Fällen wechselt der Job wieder in den Status „Wird ausgeführt“, wenn Sie ihn manuell pausiert haben. Wenn der Job aufgrund eines Fehlers pausiert wird, wechselt er in den Status „Fehlgeschlagen“.
Verarbeitung fortsetzen
Wenn der Job fortgesetzt wird, verarbeitet der Dienst Arbeitselemente so:
- Abgeschlossene Arbeit: Der Dienst verarbeitet keine Phasen oder Arbeitselemente noch einmal, die vollständig abgeschlossen waren, als der Job pausiert wurde.
- Laufende Arbeit: Alle Arbeitselemente, die sich in Bearbeitung befanden, als der Job pausiert wurde, werden von Anfang an neu verarbeitet.
- Anzahl der Fehler: Alle Fehlerzähler für Arbeitselemente werden auf null zurückgesetzt. Das bedeutet, dass Ihr Job erst dann wieder automatisch pausiert wird, wenn ein Arbeitselement weitere viermal fehlschlägt.
Option „Bei Fehler pausieren“ aktivieren
Wenn Sie die Option „Bei Fehler pausieren“ für Ihren Job aktivieren möchten, verwenden Sie die Dataflow-Dienstoption pause_on_failure, wenn Sie den Job ausführen.
Java
--dataflowServiceOptions=pause_on_failure
Python
--dataflow_service_options=pause_on_failure
Go
--dataflow_service_options=pause_on_failure
Maximale Pausendauer angeben
Standardmäßig bleibt Ihr Job bis zu 7 Tage (7d) pausiert. Sie können diese maximale Pausendauer manuell auf einen Wert zwischen 1 Stunde (1h) und 7 Tagen (7d) konfigurieren.
Nur d (Tage) und h (Stunden) werden unterstützt. Ein Tag wird als 24 Stunden definiert.
Dies entspricht aufgrund von Faktoren wie der Umstellung auf Sommerzeit möglicherweise nicht der Länge eines Kalendertags.
Wenn die maximale Pausendauer überschritten wird, wird Ihr Job innerhalb der nächsten Stunde abgebrochen. Nachdem der Job abgebrochen wurde, können Sie ihn nicht mehr fortsetzen.
Im folgenden Beispiel wird die maximale Pausendauer auf 1 Tag festgelegt:
Java
--dataflowServiceOptions=pause_on_failure=pause_duration:1d
Python
--dataflow_service_options=pause_on_failure=pause_duration:1d
Go
--dataflow_service_options=pause_on_failure=pause_duration:1d
Dataflow-Job manuell pausieren
So pausieren Sie einen Job manuell:
Console
Rufen Sie die Dataflow-Seite Jobs auf.
Klicken Sie auf den Job, den Sie pausieren möchten.
Zum Pausieren eines Jobs muss der Status des Jobs Wird ausgeführt sein.
Klicken Sie auf der Job-Detailseite auf Pausieren.
Wenn die Schaltfläche „Pausieren“ nicht angezeigt wird, kann Ihr Job aufgrund der Einschränkungen der Option „Bei Fehler pausieren“ nicht pausiert werden.
gcloud
Um einen Dataflow-Job zu pausieren, können Sie den gcloud dataflow
jobs Befehl in der
Cloud Shell oder dem lokalen Terminal, das mit der
gcloud CLI installiert wird, verwenden.
Öffnen Sie die Shell.
Listen Sie die Job-IDs der Dataflow-Jobs auf, die ausgeführt werden, und notieren Sie sich die Job-ID des Jobs, den Sie pausieren möchten:
gcloud dataflow jobs listWenn Sie das Flag
--regionnicht festlegen, werden Dataflow-Jobs aus allen verfügbaren Regionen angezeigt.Führen Sie den folgenden Befehl aus:
gcloud dataflow jobs pause JOB_ID --region=REGIONErsetzen Sie JOB_ID durch die notierte Job-ID und REGION durch die Jobregion.
API
Um einen Job mit der Dataflow REST
API zu pausieren, verwenden Sie den
projects.locations.jobs.update
Endpunkt und übergeben Sie den folgenden Anfragetext:
{
"requestedState": "JOB_STATE_PAUSING"
}
Wichtig: Übergeben Sie nicht versehentlich
JOB_STATE_PAUSED als requestedState.
Dataflow-Job abbrechen, der pausiert wird oder pausiert ist
Sie können einen Dataflow-Job, der pausiert wird oder pausiert ist, wie gewohnt abbrechen. Nachdem Sie einen Job abgebrochen haben, werden Ihnen keine Kosten mehr in Rechnung gestellt. Der Job kann jedoch nicht mehr fortgesetzt werden.
Ein pausierter Job wird automatisch abgebrochen, nachdem die maximale Pause dauer abgelaufen ist.
Dataflow-Job fortsetzen
So setzen Sie einen pausierten Job manuell fort:
Console
Rufen Sie die Dataflow-Seite Jobs auf.
Klicken Sie auf den Job, den Sie fortsetzen möchten.
Zum Fortsetzen eines Jobs muss der Status des Jobs Pausiert (nicht Wird pausiert) sein.
Klicken Sie auf der Seite mit den Jobdetails auf Fortsetzen.
gcloud
Um einen Dataflow-Job fortzusetzen, können Sie den gcloud dataflow
jobs Befehl in der
Cloud Shell oder dem lokalen Terminal, das mit der
gcloud CLI installiert wird, verwenden.
Öffnen Sie die Shell.
Listen Sie die Job-IDs der Dataflow-Jobs auf, die pausiert sind, und notieren Sie sich die Job-ID des Jobs, den Sie fortsetzen möchten:
gcloud dataflow jobs listWenn Sie das Flag
--regionnicht festlegen, werden Dataflow-Jobs aus allen verfügbaren Regionen angezeigt.Führen Sie den folgenden Befehl aus:
gcloud dataflow jobs resume JOB_ID --region=REGIONErsetzen Sie JOB_ID durch die Job-ID und REGION durch die Jobregion.
API
Um einen Job mit der Dataflow REST
API fortzusetzen, verwenden Sie den
projects.locations.jobs.update
Endpunkt und übergeben Sie den folgenden Anfragetext:
{
"requestedState": "JOB_STATE_RUNNING"
}
Nächste Schritte
- Informationen zum Beenden einer laufenden Pipeline.
- Informationen zu Dataflow Shuffle für Batch jobs, das für die Verwendung dieser Funktion erforderlich ist
- Informationen zur Fehlerbehebung bei Pipelines
- Informationen zur Fehlerbehebung bei langsamen oder hängengebliebenen Batchjobs