Mettere in pausa un job Dataflow

Utilizza l'opzione di servizio pause-on-failure per conservare lo stato dei job batch di Dataflow. Questa funzionalità ti consente di mettere in pausa l'esecuzione del job, risolvere i problemi esterni alla pipeline e riprendere l'elaborazione senza perdere il lavoro completato. Quando un job viene messo in pausa utilizzando questa funzionalità, non puoi modificare il codice della pipeline o le configurazioni delle VM worker, come il tipo di macchina.

Abilitando questa funzionalità, puoi gestire meglio i costi delle risorse e migliorare l'affidabilità dei job durante interruzioni temporanee o vincoli di quota. Puoi mantenere ulteriormente il controllo sul ciclo di vita della pipeline configurando le durate massime della pausa quando abiliti pause-on-failure. Puoi anche mettere in pausa o riprendere manualmente le pipeline per cui è abilitato il flag pause-on-failure.

Vantaggi di pause-on-failure

L'opzione di servizio pause-on-failure ti consente di conservare l'avanzamento dei job batch durante le interruzioni, riducendo il tempo di calcolo totale e la spesa per le risorse.

  • Conservazione dei checkpoint:quando un job non riesce, puoi riprenderlo dall'ultimo checkpoint registrato anziché riavviarlo dall'inizio. In questo modo, non è necessario rielaborare i blocchi di dati completati, il che significa che non devi pagare per rifare il lavoro completato correttamente.
  • Mitigazione delle dipendenze esterne:proteggi le pipeline da problemi temporanei, come interruzioni temporanee o limiti di frequenza nei servizi esterni. La messa in pausa del job ti dà l'opportunità di risolvere la causa principale prima di riprendere l'esecuzione senza perdere il lavoro completato.
  • Gestione degli errori non deterministici:per i carichi di lavoro soggetti a errori intermittenti o non deterministici, questa opzione ti consente di garantire l'avanzamento incrementale di ogni tentativo sequenziale, impedendo il fallimento totale del job.
  • Gestione delle risorse e della quota:metti in pausa i job batch a bassa priorità per liberare temporaneamente la quota o riallocare risorse di alto valore, come GPU o TPU, a carichi di lavoro urgenti come l'addestramento o l'inferenza dei modelli di machine learning senza perdere l'avanzamento di base.

Supporto e limitazioni

La messa in pausa di un job (manualmente o in caso di errore) presenta i seguenti requisiti e limitazioni:

  • Il job Dataflow deve essere un job batch.
  • Il job deve utilizzare Dataflow shuffle.
  • Devi specificare l'opzione di servizio pause_on_failure quando esegui il job.
  • Il job non deve aver precedentemente fallito la messa in pausa.

Comportamento del job pause-on-failure

Quando abiliti la funzionalità pause-on-failure, il job viene messo automaticamente in pausa dopo che un elemento di lavoro non è riuscito quattro volte. Questi errori sono identificati nei log come messaggi del job contenenti Error message from worker e messaggi del worker contenenti Completed work item ITEM_NUMBER UNSUCCESSFULLY. Altri tipi di errori, come esaurimento scorte ed errori di quota, non attivano una pausa automatica. Al contrario, questi errori causano il fallimento del job come di consueto. L'abilitazione di pause-on-failure ti consente anche di mettere in pausa manualmente un job.

Transizioni di stato del job

Quando un job Dataflow viene messo in pausa, passa attraverso i seguenti stati:

  1. Sospensione: uno stato intermedio in cui il job interrompe l'elaborazione, elimina le VM worker e archivia lo stato del backend. Ti vengono addebitati i costi delle VM finché il servizio non le elimina.
  2. In pausa: il job è completamente interrotto. A questo punto, ti vengono addebitati solo i dati di Shuffle archiviati.

Comportamenti eccezionali

Pause-on-failure potrebbe comportarsi in modo imprevisto nei seguenti scenari:

  • Se metti in pausa manualmente un job che è quasi completato, il job potrebbe essere completato anziché messo in pausa.
  • In rare circostanze, un job potrebbe non essere messo in pausa. In questi casi, il job torna allo stato di esecuzione se lo hai messo in pausa manualmente oppure entra in uno stato di errore se la pausa è dovuta a un errore.

Ripresa dell'elaborazione

Quando il job viene ripreso, il servizio gestisce gli elementi di lavoro nel seguente modo:

  • Lavoro completato: il servizio non rielabora le fasi o gli elementi di lavoro completati quando il job è stato messo in pausa.
  • Lavoro in corso: tutti gli elementi di lavoro in corso quando il job è stato messo in pausa vengono rielaborati dall'inizio.
  • Conteggi degli errori: tutti i conteggi degli errori degli elementi di lavoro vengono reimpostati su zero, il che significa che il job non verrà messo automaticamente in pausa di nuovo finché un elemento di lavoro non fallisce altre quattro volte.

Abilitare pause-on-failure

Per abilitare pause-on-failure per il job, utilizza l'opzione di servizio Dataflow pause_on_failure quando esegui il job.

Java

--dataflowServiceOptions=pause_on_failure

Python

--dataflow_service_options=pause_on_failure

Vai

--dataflow_service_options=pause_on_failure

Specificare una durata massima della pausa

Per impostazione predefinita, il job rimarrà in pausa per un massimo di 7 giorni (7d). Puoi configurare manualmente questa durata massima della pausa tra 1 ora (1h) e 7 giorni (7d).

Sono supportati solo d (giorni) e h (ore). Un giorno è definito come 24 ore. Questo potrebbe non corrispondere alla durata di un giorno di calendario a causa di fattori come l'ora legale.

Una volta trascorsa la durata massima della pausa, il job viene annullato e non può più essere ripreso.

Ad esempio, il seguente esempio imposta la durata massima della pausa su 1 giorno:

Java

--dataflowServiceOptions=pause_on_failure=pause_duration:1d

Python

--dataflow_service_options=pause_on_failure=pause_duration:1d

Vai

--dataflow_service_options=pause_on_failure=pause_duration:1d

Mettere in pausa manualmente un job Dataflow

Per mettere in pausa manualmente un job:

Console

  1. Vai alla pagina Job di Dataflow.

    Vai a Job

  2. Fai clic sul job che vuoi mettere in pausa.

    Per mettere in pausa un job, lo stato del job deve essere running.

  3. Nella pagina dei dettagli del job, fai clic su Metti in pausa.

    Se non vedi il pulsante Metti in pausa, il job non può essere messo in pausa a causa delle limitazioni di pause-on-failure.

gcloud

Per mettere in pausa un job Dataflow, puoi utilizzare il gcloud dataflow jobs comando in Cloud Shell o in un terminale locale in cui è installato gcloud CLI.

  1. Apri la shell.

  2. Elenca gli ID job per i job Dataflow in esecuzione, quindi prendi nota dell'ID job per il job che vuoi mettere in pausa:

    gcloud dataflow jobs list
    

    Se non imposti il flag --region, vengono visualizzati i job Dataflow di tutte le regioni disponibili.

  3. Esegui il comando seguente:

    gcloud dataflow jobs pause JOB_ID --region=REGION
    

    Sostituisci JOB_ID con l'ID job annotato e REGION con la regione del job.

API

Per mettere in pausa un job utilizzando l'API REST Dataflow, utilizza l'projects.locations.jobs.updateendpoint e passa il seguente corpo della richiesta:

{
  "requestedState": "JOB_STATE_PAUSING"
}

Importante: non passare accidentalmente JOB_STATE_PAUSED come requestedState.

Annullare un job Dataflow in pausa o in pausa

Puoi annullare un job Dataflow in pausa o in pausa come di consueto. Una volta annullato un job, non ti verrà più addebitato alcun importo, ma il job non potrà più essere ripreso.

Un job in pausa viene annullato automaticamente dopo la scadenza della durata massima della pausa.

Riprendere un job Dataflow

Per riprendere manualmente il job in pausa:

Console

  1. Vai alla pagina Job di Dataflow.

    Vai a Job

  2. Fai clic sul job che vuoi riprendere.

    Per riprendere un job, lo stato del job deve essere paused (non pausing).

  3. Nella pagina dei dettagli del job, fai clic su Riprendi.

gcloud

Per riprendere un job Dataflow, puoi utilizzare il gcloud dataflow jobs comando in Cloud Shell o in un terminale locale in cui è installato gcloud CLI.

  1. Apri la shell.

  2. Elenca gli ID job per i job Dataflow in pausa, quindi prendi nota dell'ID job per il job che vuoi riprendere:

    gcloud dataflow jobs list
    

    Se non imposti il flag --region, vengono visualizzati i job Dataflow di tutte le regioni disponibili.

  3. Esegui il comando seguente:

    gcloud dataflow jobs resume JOB_ID --region=REGION
    

    Sostituisci JOB_ID con l'ID job e REGION con la regione del job.

API

Per riprendere un job utilizzando l'API REST Dataflow, utilizza l'projects.locations.jobs.updateendpoint e passa il seguente corpo della richiesta:

{
  "requestedState": "JOB_STATE_RUNNING"
}

Passaggi successivi