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 den Lebenszyklus Ihrer Pipeline weiter steuern, indem Sie maximale Pausierungsdauern 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 den Ressourcenverbrauch 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_failure Dienstoption angeben, wenn Sie denJob ausführen.
  • Der Job darf zuvor nicht beim Pausieren fehlgeschlagen sein.
  • Der Inhalt des temporären Verzeichnisses des Jobs darf nicht gelöscht werden, während der Job pausiert ist.

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 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 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 (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 ist 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 die Option „Bei Fehler pausieren“ 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 „Wird ausgeführt“ zurück, 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: Die Anzahl der Fehler bei allen Arbeitselementen wird 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 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 aufgrund von Faktoren wie der Umstellung auf Sommerzeit möglicherweise nicht der Länge eines Kalendertags.

Wenn die maximale Pausierungsdauer ü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 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

Führen Sie die folgenden Schritte aus, um einen Job manuell zu pausieren.

Console

  1. Rufen Sie die Dataflow-Seite Jobs auf.

    ZU 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 einem lokalen Terminal verwenden, das mit der gcloud CLI installiert wurde.

  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 Pausierungs dauer abgelaufen ist.

Dataflow-Job fortsetzen

So setzen Sie Ihren pausierten Job manuell fort:

Console

  1. Rufen Sie die Dataflow-Seite Jobs auf.

    ZU JOBS

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

    Zum Fortsetzen eines Jobs muss der Status des Jobs Pausiert (nicht 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 einem lokalen Terminal verwenden, das mit der gcloud CLI installiert wurde.

  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