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
oumax_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
emax_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.