Dataflow-Job pausieren

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:

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:

  1. 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.
  2. 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

  1. Rufen Sie die Dataflow-Seite Jobs auf.

    Zu den Jobs

  2. Klicken Sie auf den Job, den Sie pausieren möchten.

    Zum Pausieren eines Jobs muss der Status des Jobs Wird ausgeführt sein.

  3. 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.

  1. Öffnen Sie die Shell.

  2. 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 list
    

    Wenn Sie das Flag --region nicht festlegen, werden Dataflow-Jobs aus allen verfügbaren Regionen angezeigt.

  3. Führen Sie den folgenden Befehl aus:

    gcloud dataflow jobs pause JOB_ID --region=REGION
    

    Ersetzen 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

  1. Rufen Sie die Dataflow-Seite Jobs auf.

    Zu den Jobs

  2. Klicken Sie auf den Job, den Sie fortsetzen möchten.

    Zum Fortsetzen eines Jobs muss der Status des Jobs Pausiert (nicht Wird pausiert) sein.

  3. 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.

  1. Öffnen Sie die Shell.

  2. 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 list
    

    Wenn Sie das Flag --region nicht festlegen, werden Dataflow-Jobs aus allen verfügbaren Regionen angezeigt.

  3. Führen Sie den folgenden Befehl aus:

    gcloud dataflow jobs resume JOB_ID --region=REGION
    

    Ersetzen 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