Mit der Dienstoption „pause-on-failure“ können Sie den Status Ihrer Dataflow-Batchjobs beibehalten. Mit dieser Funktion können Sie die Jobausführung pausieren, Probleme beheben, die nicht mit der Pipeline zusammenhängen, 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 Pausierungsdauern konfigurieren, wenn Sie „pause-on-failure“ aktivieren. Sie können Pipelines, für die das Flag „pause-on-failure“ aktiviert ist, auch manuell pausieren oder fortsetzen.
Vorteile von „pause-on-failure“
Mit der Dienstoption „pause-on-failure“ 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, können Sie die Ursache 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 Modellen für maschinelles Lernen 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.
- Für den Job muss Dataflow Shuffle verwendet werden.
- Sie müssen die
pause_on_failureDienstoption angeben, wenn Sie denJob ausführen. - Der Job darf zuvor nicht beim Pausieren fehlgeschlagen sein.
Jobverhalten bei „pause-on-failure“
Wenn Sie die Funktion „pause-on-failure“ 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 Arbeiternachrichten
mit Completed work item ITEM_NUMBER
UNSUCCESSFULLY identifiziert. Andere Arten von Fehlern wie Ausverkäufe und Kontingentfehler lösen keine automatische Pause aus. Stattdessen führen diese Fehler dazu, dass der Job wie gewohnt fehlschlägt. Wenn Sie „pause-on-failure“ aktivieren, können Sie einen Job auch manuell pausieren.
Jobstatusübergänge
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
In den folgenden Szenarien kann es vorkommen, dass sich „pause-on-failure“ unerwartet verhält:
- 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 kehrt der Job in den Status „running“ (Wird ausgeführt) zurück, wenn Sie ihn manuell pausiert haben. Wenn der Job aufgrund eines Fehlers pausiert wird, wechselt er in den Status „failed“ (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 noch einmal 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.
„pause-on-failure“ aktivieren
Wenn Sie „pause-on-failure“ 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 Pausierungsdauer angeben
Standardmäßig bleibt Ihr Job bis zu 7 Tage (7d) pausiert. Sie können diese maximale Pausierungsdauer 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 möglicherweise nicht der Länge eines Kalendertags, da Faktoren wie die Umstellung auf Sommerzeit eine Rolle spielen.
Nach Ablauf der maximalen Pausierungsdauer wird Ihr Job abgebrochen und kann nicht mehr fortgesetzt werden.
Im folgenden Beispiel wird die maximale Pausierungsdauer 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 running (Wird ausgeführt) sein.
Klicken Sie auf der Detailseite des Jobs auf Pause.
Wenn die Schaltfläche „Pause“ nicht angezeigt wird, kann Ihr Job nicht pausiert werden aufgrund der Einschränkungen von „pause-on-failure“.
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 Pausierungs 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 paused (Pausiert) und nicht pausing (Wird pausiert) sein.
Klicken Sie auf der Seite mit den Jobdetails auf Resume (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