Per impostazione predefinita, i job Dataproc non vengono riavviati automaticamente in caso di errore. Utilizzando le impostazioni facoltative, puoi impostare il riavvio dei job in caso di errore. Quando imposti il riavvio di un job, specifichi il numero massimo di tentativi per ora (il valore massimo è 10 tentativi per ora) o il numero massimo di tentativi totali (il valore massimo è 240 tentativi totali) o entrambi.
Il riavvio dei job mitiga i tipi comuni di errori dei job, inclusi i problemi di memoria insufficiente e i riavvii imprevisti delle macchine virtuali Compute Engine. I job riavviabili sono particolarmente utili per i job di lunga durata e di streaming. Ad esempio, puoi riavviare i job Spark in streaming in esecuzione sui cluster Dataproc per assicurarti che siano resilienti.
Semantica dei job riavviabili
Per la segnalazione dell'esito positivo o negativo dei job si applicano le seguenti semantiche:
- Un job viene segnalato come riuscito se il conducente termina con il codice
0
. - Un job viene segnalato come non riuscito se:
- Il driver termina con un codice diverso da zero più di 4 volte in 10 minuti.
- Il driver termina con un codice diverso da zero e ha superato l'impostazione
max_failures_per_hour
omax_failures_total
.
- Un job verrà riavviato se il driver esce con un codice diverso da zero, non è
in thrashing e rientra nelle impostazioni
max_failures_per_hour
emax_failures_total
.
Considerazioni sulla progettazione del lavoro
- Progetta i job in modo che gestiscano correttamente il riavvio. Ad esempio, se il tuo job scrive in una directory, deve prevedere la possibilità che la directory esista quando viene riavviato.
- I job di streaming Apache Spark che eseguono il checkpoint possono essere riavviati dopo l'errore, ma non segnaleranno lo stato di Yarn.
Creare e utilizzare job riavviabili
Puoi specificare il numero massimo di riavvii di un job all'ora e il numero massimo di tentativi totali quando invii il job tramite lo strumento a riga di comando gcloud, l'API REST Dataproc oGoogle Cloud console.
Esempio: se vuoi consentire al job di riprovare fino a 10 volte, ma non più di
5 volte in un'ora, imposta max-failures-total
su 10 e max-failures-per-hour
su 5.
gcloud
Specifica il numero massimo di volte in cui un job può essere riavviato all'ora
(il valore massimo è 10 tentativi all'ora) o il numero massimo di tentativi
totali (il valore massimo è 240 tentativi totali) o entrambi, utilizzando i flag
--max-failures-per-hour
e --max-failures-total
, rispettivamente.
gcloud dataproc jobs submit job type \ --region=region \ --max-failures-per-hour=number \ --max-failures-total=number \ ... other args
API REST
Specifica il numero massimo di volte in cui un job può essere riavviato all'ora
(il valore massimo è 10 tentativi all'ora) o il numero massimo di tentativi
totali (il valore massimo è 240 tentativi totali) o entrambi, impostando i campi
Job.JobScheduling
maxFailuresPerHour
e/o maxFailuresTotal
, rispettivamente.
Esempio
POST /v1/projects/project-id/regions/us-central1/jobs:submit/ { "projectId": "project-id", "job": { "placement": { "clusterName": "example-cluster" }, "reference": { "jobId": "cea7ae0b...." }, "sparkJob": { "args": [ "1000" ], "mainClass": "org.apache.spark.examples.SparkPi", "jarFileUris": [ "file:///usr/lib/spark/examples/jars/spark-examples.jar" ] }, "scheduling": { "maxFailuresPerHour": 5 "maxFailuresTotal": 10 } } }
Console
Puoi inviare job riavviabili specificando il valore max restarts per hour nella pagina Invia un job di Dataproc (il valore massimo è 10 volte all'ora). L'impostazione del numero massimo di riavvii totali non è disponibile nella console Google Cloud .