Tâches redémarrables

Par défaut, les tâches Dataproc ne redémarrent pas automatiquement en cas d'échec. Certains paramètres facultatifs vous permettent de configurer les tâches pour qu'elles redémarrent en cas d'échec. Lorsque vous définissez une tâche pour qu'elle redémarre, vous spécifiez le nombre maximal de nouvelles tentatives par heure (10 nouvelles tentatives par heure maximum) et/ou le nombre maximal et total de nouvelles tentatives (240 nouvelles tentatives maximum au total).

Le redémarrage des tâches atténue les types d'échecs courants, comme les problèmes de mémoire insuffisante et les redémarrages inattendus de machines virtuelles Compute Engine. Le redémarrage est particulièrement utile pour les tâches de longue durée et en flux continu. Par exemple, vous pouvez redémarrer les tâches en flux continu Spark exécutées sur des clusters Dataproc pour vous assurer qu'elles sont résilientes.

Sémantique de tâche redémarrable

La sémantique suivante s'applique à la notification de succès ou d'échec des tâches :

  • Une tâche est signalée comme réussie si le pilote se termine avec le code 0.
  • Une tâche est signalée comme un échec dans les cas suivants :
    • Le pilote se termine avec un code non égal à 0 plus de 4 fois en 10 minutes.
    • Le pilote se termine avec un code non égal à 0 et a dépassé la limite définie dans le paramètre max_failures_per_hour ou max_failures_total.
  • Une tâche est redémarrée si le pilote se termine avec un code non égal à 0, s'il ne fait pas face à une situation de thrashing et s'il respecte la limite définie dans le paramètre max_failures_per_hour ou max_failures_total.

Considérations liées à la conception des tâches

  • Concevez vos tâches de manière à qu'elles redémarrent avec fluidité. Par exemple, si votre tâche écrit dans un répertoire, elle accepte la possibilité que le répertoire existe déjà lorsque la tâche est redémarrée.
  • Les tâches en flux continu Apache Spark dont le point de contrôle peut être redémarré après un échec n'indiquent pas le statut du YARN.

Créer et utiliser des tâches redémarrables

Vous pouvez spécifier le nombre maximal de redémarrages d'une tâche par heure et le nombre maximal de nouvelles tentatives lorsque vous envoyez la tâche via l'outil de ligne de commande gcloud de gcloud CLI, via l'API REST Dataproc ou via la console Google Cloud.

Exemple : Si vous souhaitez autoriser votre tâche à effectuer jusqu'à 10 nouvelles tentatives, mais pas plus de cinq fois en une heure, définissez max-failures-total sur 10 et max-failures-per-hour sur 5.

gcloud

Spécifiez le nombre maximal de redémarrages d'une tâche par heure (10 nouvelles tentatives par heure) et/ou le nombre maximal et total de nouvelles tentatives (240 nouvelles tentatives maximum au total) à l'aide des options --max-failures-per-hour et --max-failures-total, respectivement.

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

API REST

Spécifiez le nombre maximal de redémarrages d'une tâche par heure (10 nouvelles tentatives par heure) et/ou le nombre maximal et total de nouvelles tentatives (240 nouvelles tentatives maximum au total) en définissant les champs maxFailuresPerHour et maxFailuresTotal de Job.JobScheduling, respectivement.

Exemple

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

Vous pouvez envoyer des tâches redémarrables en spécifiant le nombre maximal de redémarrages par heure sur la page Envoyer une tâche de Dataproc (10 fois maximum par heure). Actuellement, le paramètre permettant de spécifier le nombre maximal de redémarrages total n'est pas disponible dans la console Google Cloud.