Por predefinição, as tarefas do Dataproc não são reiniciadas automaticamente em caso de falha. Ao usar definições opcionais, pode definir a repetição de tarefas em caso de falha. Quando define uma tarefa para reiniciar, especifica o número máximo de novas tentativas por hora (o valor máximo é de 10 novas tentativas por hora) ou o número máximo de novas tentativas totais (o valor máximo é de 240 novas tentativas totais) ou ambos.
O reinício de tarefas mitiga os tipos comuns de falhas de tarefas, incluindo problemas de falta de memória e reinícios inesperados de máquinas virtuais do Compute Engine. As tarefas reiniciáveis são particularmente úteis para tarefas de execução prolongada e de streaming. Por exemplo, pode reiniciar tarefas de streaming do Spark executadas em clusters do Dataproc para garantir que as tarefas de streaming são resilientes.
Semântica de tarefas reiniciáveis
A semântica seguinte aplica-se à comunicação do êxito ou da falha das tarefas:
- Uma tarefa é comunicada como bem-sucedida se o controlador terminar com o código
0
. - Uma tarefa é comunicada como com falhas se:
- O controlador termina com um código diferente de zero mais de 4 vezes em 10 minutos.
- O controlador termina com um código diferente de zero e excedeu a definição
max_failures_per_hour
oumax_failures_total
.
- Uma tarefa é reiniciada se o controlador sair com um código diferente de zero, não estiver a falhar repetidamente e estiver dentro das definições
max_failures_per_hour
emax_failures_total
.
Considerações sobre o design do trabalho
- Crie os seus trabalhos para processarem o reinício de forma adequada. Por exemplo, se a sua tarefa escrever num diretório, a tarefa deve ter em conta a possibilidade de o diretório existir quando a tarefa for reiniciada.
- Os trabalhos de streaming do Apache Spark que usam pontos de verificação podem ser reiniciados após uma falha, mas não comunicam o estado do Yarn.
Crie e use tarefas reiniciáveis
Pode especificar o número máximo de vezes que uma tarefa pode ser reiniciada por hora e o número máximo de novas tentativas totais ao enviar a tarefa através da CLI gcloud, da ferramenta de linha de comandos gcloud, da API REST Dataproc ou daGoogle Cloud console.
Exemplo: se quiser permitir que a sua tarefa seja repetida até 10 vezes, mas não mais de 5 vezes numa hora, defina max-failures-total
como 10 e max-failures-per-hour
como 5.
gcloud
Especifique o número máximo de vezes que uma tarefa pode ser reiniciada por hora (o valor máximo é de 10 tentativas por hora) ou o número máximo de tentativas totais (o valor máximo é de 240 tentativas totais) ou ambos, usando as flags --max-failures-per-hour
e --max-failures-total
, respetivamente.
gcloud dataproc jobs submit job type \ --region=region \ --max-failures-per-hour=number \ --max-failures-total=number \ ... other args
API REST
Especifique o número máximo de vezes que uma tarefa pode ser reiniciada por hora (o valor máximo é 10 novas tentativas por hora) ou o número máximo de novas tentativas totais (o valor máximo é 240 novas tentativas totais) ou ambos, definindo os campos Job.JobScheduling
maxFailuresPerHour
e/ou maxFailuresTotal
, respetivamente.
Exemplo
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 } } }
Consola
Pode enviar tarefas reiniciáveis especificando o máximo de reinícios por hora na página Enviar uma tarefa do Dataproc (o valor máximo é 10 vezes por hora). A definição do total de reinícios máximos não está disponível na Google Cloud consola.