Résoudre les problèmes de retard des tâches

Cette page liste les causes courantes des retards de planification des jobs Managed Service pour Apache Spark, avec des informations qui peuvent vous aider à les éviter.

Présentation

Voici les raisons courantes pour lesquelles un job Managed Service pour Apache Spark est retardé (limité) :

  • Trop de tâches en cours
  • Utilisation élevée de la mémoire système
  • Mémoire libre insuffisante
  • Limitation du débit dépassée

En général, le message de retard du job se présente au format suivant :

Awaiting execution [SCHEDULER_MESSAGE]"

Les sections suivantes fournissent des causes possibles et des solutions pour des scénarios de retard de tâches spécifiques.

Trop de tâches en cours

Message du planificateur :

Throttling job ### (and maybe others): Too many running jobs (current=xx max=xx)

Causes :

Le nombre maximal de tâches simultanées basé sur la mémoire de la VM maître est dépassé (le pilote de job s'exécute sur la VM maître de cluster Managed Service pour Apache Spark). Par défaut, Managed Service pour Apache Spark réserve 3,5 Go de mémoire pour les applications et autorise un job par Go.

Exemple : Le type de machine n1-standard-4 dispose de 15GB Go de mémoire. Avec 3.5GB Go réservés aux frais généraux, il reste 11.5GB Go. En arrondissant à l'entier inférieur, 11GB Go sont disponibles pour un maximum de 11 jobs simultanés.

Solutions :

  1. Surveillez les métriques de journaux, telles que l'utilisation du processeur et de la mémoire, pour estimer les exigences des jobs.

  2. Lorsque vous créez un cluster de jobs :

    1. Utilisez un type de machine avec une plus grande capacité de mémoire pour la VM maître du cluster.

    2. Si 1GB par job est supérieur à ce dont vous avez besoin, définissez la propriété de cluster dataproc:dataproc.scheduler.driver-size-mb sur une valeur inférieure à 1024.

    3. Définissez la propriété de cluster dataproc:dataproc.scheduler.max-concurrent-jobs sur une valeur adaptée aux exigences de votre job.

Mémoire système élevée ou mémoire libre insuffisante

Message du planificateur :

Throttling job xxx_____JOBID_____xxx (and maybe others): High system memory usage (current=xx%)

Throttling job xxx_____JOBID_____xxx (and maybe others): Not enough free memory (current=xx min=xx)

Causes :

Par défaut, l'agent Managed Service pour Apache Spark limite l'envoi de jobs lorsque l'utilisation de la mémoire atteint 90% (0.9)). Lorsque cette limite est atteinte, il est impossible de planifier de nouveaux jobs.

La quantité de mémoire libre nécessaire pour planifier un autre job sur le cluster n'est pas suffisante.

Solution :

  1. Lorsque vous créez un cluster :

    1. Augmentez la valeur de la propriété du cluster dataproc:dataproc.scheduler.max-memory-used. Par exemple, définissez-le sur 0.95 au lieu de la valeur par défaut 0.90.
    2. Augmentez la valeur de la propriété du cluster dataproc.scheduler.min-free-memory.mb. La valeur par défaut est de 256 Mo.

Fréquence maximale des tâches dépassée

Message du planificateur :

Throttling job xxx__JOBID___xxx (and maybe others): Rate limit

Causes :

L'agent Managed Service pour Apache Spark a atteint la limite de fréquence d'envoi des jobs.

Solutions :

  1. Par défaut, le nombre de jobs envoyés par l'agent Managed Service pour Apache Spark est limité à 1.0 QPS. Vous pouvez définir une autre valeur lorsque vous créez un cluster avec la propriété de cluster dataproc:dataproc.scheduler.job-submission-rate.

Afficher l'état d'une mission

Pour afficher l'état et les détails d'un job, consultez Surveillance et débogage des jobs.