De forma predeterminada, las tareas de Dataproc no se reiniciarán automáticamente si fallan. Si usas ajustes opcionales, puedes configurar los trabajos para que se reinicien si fallan. Cuando configuras un trabajo para que se reinicie, especificas el número máximo de reintentos por hora (el valor máximo es de 10 reintentos por hora) o el número máximo de reintentos totales (el valor máximo es de 240 reintentos totales) o ambos.
Reiniciar los trabajos mitiga los tipos habituales de errores de trabajo, como los problemas de falta de memoria y los reinicios inesperados de máquinas virtuales de Compute Engine. Las tareas reiniciables son especialmente útiles para las tareas de larga duración y de streaming. Por ejemplo, puedes reiniciar las tareas de streaming de Spark que se ejecutan en clústeres de Dataproc para asegurarte de que sean resistentes.
Semántica de las tareas reiniciables
Las siguientes semánticas se aplican a los informes sobre el éxito o el fracaso de los trabajos:
- Una tarea se considera correcta si el controlador finaliza con el código
0
. - Una tarea se marca como fallida si:
- 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 ha superado el ajuste de
max_failures_per_hour
omax_failures_total
.
- Un trabajo se reiniciará si el controlador sale con un código distinto de cero, no está en bucle y se encuentra dentro de los ajustes
max_failures_per_hour
ymax_failures_total
.
Consideraciones sobre el diseño de tareas
- Diseña tus tareas para que gestionen correctamente los reinicios. Por ejemplo, si tu trabajo escribe en un directorio, debe tener en cuenta la posibilidad de que el directorio exista cuando se reinicie el trabajo.
- Las tareas de streaming de Apache Spark que tienen puntos de control se pueden reiniciar después de un fallo, pero no informarán del estado de Yarn.
Crear y usar tareas reiniciables
Puedes especificar el número máximo de veces que se puede reiniciar una tarea por hora y el número máximo de reintentos totales al enviar la tarea a través de la herramienta de línea de comandos gcloud de gcloud CLI, la API REST de Dataproc o elGoogle Cloud console.
Ejemplo: Si quieres permitir que tu trabajo se vuelva a intentar hasta 10 veces, pero no más de 5 veces en una hora, asigna el valor 10 a max-failures-total
y el valor 5 a max-failures-per-hour
.
gcloud
Especifica el número máximo de veces que se puede reiniciar un trabajo por hora (el valor máximo es de 10 reintentos por hora) o el número máximo de reintentos totales (el valor máximo es de 240 reintentos totales) o ambos, 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 REST
Especifica el número máximo de veces que se puede reiniciar una tarea por hora (el valor máximo es 10 reintentos por hora) o el número máximo de reintentos totales (el valor máximo es 240 reintentos totales) o ambos. Para ello, define los campos Job.JobScheduling
maxFailuresPerHour
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 } } }
Consola
Puedes enviar tareas reiniciables especificando el valor max restarts per hour (máximo de reinicios por hora) en la página Enviar una tarea de Dataproc (el valor máximo es 10 veces por hora). El ajuste de reinicios máximos totales no está disponible en la consola Google Cloud .