Trabajos reiniciables

De forma predeterminada, los trabajos de Dataproc no se reiniciarán automáticamente en caso de error. Mediante el uso de una configuración opcional, puedes establecer que los trabajos se reinicien en caso de falla. Cuando configuras un trabajo para que se reinicie, especificas el número máximo de reintentos por hora (el límite superior es 10 reintentos por hora).

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 para trabajos de transmisión y de larga duración. Por ejemplo, puedes reiniciar los trabajos de transmisión de Spark que se ejecutan en clústeres de Dataproc para garantizar que los trabajos de transmisión sean resilientes. Los trabajos reiniciables se pueden crear a través de la herramienta de línea de comandos de gcloud del SDK de Cloud o la API de REST de Cloud Dataproc.

Semántica de los trabajos reiniciables

Cualquier tipo de trabajo de Dataproc se puede marcar como reiniciable. Esto se aplica a trabajos enviados a través de Google Cloud Console, la herramienta de línea de comandos de gcloud del SDK de Cloud o la API de REST de Dataproc.

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.
  • Un trabajo se reiniciará si el controlador finaliza con un código distinto de cero, no produce hiperpaginación y max_failures_per_hour se mantiene debajo del valor establecido.

Limitaciones conocidas

Las siguientes limitaciones se aplican a los trabajos reiniciables en Dataproc.

  • Debes diseñar tus trabajos para controlar fácilmente el reinicio. Por ejemplo, si tu trabajo se escribe en un directorio, el trabajo deberá tener en cuenta el hecho de que el directorio ya puede existir cuando se reinicia el trabajo.
  • Los trabajos de transmisión de Apache Spark que pasan el punto de control se pueden reiniciar luego de la falla, pero estos trabajos no informarán un estado Yarn.

Cómo crear y usar trabajos reiniciables

gcloud

Puedes especificar la cantidad máxima de veces por hora que un trabajo se puede reiniciar cuando lo envíes mediante la herramienta de línea de comandos de gcloud (el valor máximo es 10 reintentos por hora).

gcloud dataproc jobs submit job type \
    --region=region \
    --max-failures-per-hour=number \
    ... other args

API de REST

Puedes configurar trabajos para que se reinicien a través de la API de REST de Dataproc. Usa la API de jobs.submit para establecer la cantidad de veces que un trabajo se puede reiniciar si falla. Para establecer la cantidad máxima de fallas de un trabajo, especifica un objeto JobScheduling y configura el campo max_failures_per_hour (el valor máximo es de 10 reintentos por hora).

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

Console

Puedes enviar trabajos reiniciables si especificas los reinicios máximos por hora en la página Submit a job (Enviar un trabajo) de Dataproc (el valor máximo es 10 veces por hora).