Jobs reinicializáveis

Por padrão, os jobs do Dataproc não são reiniciados automaticamente em caso de falha. Usando configurações opcionais, é possível definir a reinicialização de jobs em caso de falha. Ao definir um job para reiniciar, você especifica o número máximo de tentativas por hora (o valor máximo é de 10 tentativas por hora) e/ou o número máximo de tentativas totais (o valor máximo é 240 no total novas tentativas).

A reinicialização de jobs atenua os tipos comuns de falha, incluindo problemas de falta de memória e reinicializações inesperadas da máquina virtual do Compute Engine. Os jobs reinicializáveis são especialmente úteis para aqueles de longa duração e de streaming. Por exemplo, é possível reiniciar jobs de streaming do Spark em execução em clusters do Dataproc para garantir que eles sejam resilientes.

Semântica de job reinicializável

A semântica a seguir é aplicável a relatórios de sucesso ou falha de jobs:

  • Um job será relatado como bem-sucedido se o driver terminar com o código 0.
  • Um job será relatado como falha, se:
    • O driver terminar com um código diferente de zero mais de quatro vezes em 10 minutos.
    • O driver terminar com um código diferente de zero e tiver excedido a configuração max_failures_per_hour ou max_failures_total.
  • Uma tarefa será reiniciada se o driver sair com um código diferente de zero, não estiver fazendo thrash e estiver na configuração max_failures_per_hour e max_failures_total.

Considerações sobre o design do job

  • Projete os jobs para lidar com a reinicialização. Por exemplo, se o job for gravado em um diretório, ele acomodará a possibilidade de que o diretório exista quando o job for reiniciado.
  • Os jobs de streaming do Apache Spark que tiverem um checkpoint podem ser reiniciados após a falha, mas não informarão o status de Yarn.

Criar e usar jobs reinicializáveis

É possível especificar o número máximo de vezes que um job pode ser reiniciado por hora e o número máximo de tentativas totais ao enviar o job pela linha de comando gcloud do CLI do gcloud, a API REST do Dataproc ou o Console do Google Cloud.

Exemplo: se você quiser permitir que o job tente novamente até 10 vezes, mas não mais de cinco vezes em uma hora, defina max-failures-total como 10 e max-failures-per-hour como 5. para criar um anexo da VLAN de monitoramento.

gcloud

Especifique o número máximo de vezes que um job pode ser reiniciado por hora (o valor máximo é de 10 tentativas por hora) e/ou o número máximo de novas tentativas (o valor máximo é 240 tentativas no total) usando --max-failures-per-hour e--max-failures-total sinalizações, respectivamente.

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 um job pode ser reiniciado por hora (o valor máximo é de 10 tentativas por hora) e/ou o número máximo de tentativas totais (o valor máximo é 240 novas tentativas) definindo.Job.JobScheduling maxFailuresPerHour e/oumaxFailuresTotal, respectivamente.

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
}
}
}

Console

É possível enviar jobs reinicializáveis. Para isso, basta especificar o número máximo de reinicializações por hora na página Enviar um job do Cloud Dataproc. O valor máximo é de 10 tentativas por hora. Atualmente, o total de reinicializações máximas não está disponível no console do Google Cloud.