Tarefas reiniciáveis

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 ou max_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 e max_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.