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_houroumax_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_houremax_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
maxFailuresPerHoure/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.