De forma predeterminada, los trabajos de Dataproc no se reiniciarán automáticamente en caso de error. Mediante el uso de la configuración opcional, puedes establecer que los trabajos se reinicien en caso de falla. Cuando configuras un trabajo para que se reinicie, especificas la cantidad máxima de reintentos por hora (el valor máximo es de 10 reintentos por hora) o la cantidad máxima de reintentos total (el valor máximo es de 240 reintentos en total).
El reinicio de los trabajos mitiga los tipos comunes de falla de trabajo, incluidos los problemas de memoria insuficiente y los reinicios inesperados de la máquina virtual de Compute Engine. Los trabajos reiniciables son especialmente útiles en los casos de transmisión y de larga duración. Por ejemplo, puedes reiniciar los trabajos de transmisión de Spark que se ejecutan en los clústeres de Dataproc para garantizar que los trabajos de transmisión sean resilientes.
Semántica de los trabajos reiniciables
La siguiente semántica se aplica al informe de la falla o el éxito de los trabajos:
- Un trabajo se informa como exitoso si el controlador finaliza con el código
0
. - Un trabajo se informa con errores en los siguientes casos:
- El controlador finaliza con un código distinto de cero más de 4 veces en 10 minutos.
- El controlador finaliza con un código distinto de cero y superó la configuración de
max_failures_per_hour
omax_failures_total
.
- Un trabajo se reiniciará si el controlador finaliza con un código distinto de cero, no produce hiperpaginación y se mantiene dentro de la configuración de
max_failures_per_hour
ymax_failures_total
.
Consideraciones del diseño del trabajo
- Diseña tus trabajos para controlar fácilmente el reinicio. Por ejemplo, si tu trabajo se escribe en un directorio, se adapta a la posibilidad de que el directorio exista cuando se reinicie el trabajo.
- Los trabajos de Apache Spark Streaming que pasan el punto de control se pueden reiniciar luego de la falla, pero no informarán un estado Yarn.
Cómo crear y usar trabajos reiniciables
Puedes especificar la cantidad máxima de veces que se puede reiniciar un trabajo por hora y la cantidad máxima de reintentos totales cuando envías el trabajo a través de gcloud CLI gcloud, la API de REST de Dataproc o Consola de Google Cloud.
Ejemplo: Si deseas permitir que tu trabajo vuelva a intentarlo hasta 10 veces, pero no más de 5 veces en una hora, configura max-failures-total
como 10 y max-failures-per-hour
como 5.
gcloud
Especifica la cantidad máxima de veces por hora que un trabajo se puede reiniciar (el valor máximo es de 10 reintentos por hora) o la cantidad máxima de reintentos (el valor máximo es de 240 reintentos en total) mediante las marcas --max-failures-per-hour
y --max-failures-total
, respectivamente.
gcloud dataproc jobs submit job type \ --region=region \ --max-failures-per-hour=number \ --max-failures-total=number \ ... other args
API de REST
Especifica la cantidad máxima de veces que se puede reiniciar un trabajo por hora (el valor máximo es de 10 reintentos por hora) o la cantidad máxima de reintentos (el valor máximo es de 240 reintentos en total) mediante la configuración de los campos Job.JobScheduling
maxFailuresPerHour
y/o maxFailuresTotal
, respectivamente
Ejemplo
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
Puedes enviar trabajos reiniciables si especificas los reinicios máximos por hora en la página Envía un trabajo de Dataproc (el valor máximo es 10 veces por hora). Actualmente, la cantidad máxima de reinicios totales no está disponible en la consola de Google Cloud.