Résoudre les problèmes de mémoire insuffisante des VM

Effets OOM

Lorsque les VM Dataproc sur Compute Engine rencontrent des erreurs de saturation de la mémoire:

  • Les VM maîtres et de calcul se figent pendant un certain temps.

  • Les erreurs OOM des VM maîtres entraînent l'échec des tâches et l'erreur "Tâche non acquise".

  • Les erreurs OOM de VM de calcul entraînent la perte du nœud sur HDFS, ce qui retarde l'exécution du job Dataproc.

Commandes de mémoire du fil

Yarn fournit trois types de contrôles de la mémoire:

  1. En fonction d'un sondage (ancienne version)
  2. Strict
  3. Elastic

Par défaut, Dataproc ne définit pas yarn.nodemanager.resource.memory.enabled pour activer les contrôles de mémoire YAML pour les raisons suivantes:

  • Un contrôle strict de la mémoire peut entraîner l'arrêt des conteneurs lorsque la mémoire est suffisante si leurs tailles ne sont pas configurées correctement.
  • Les exigences de contrôle de la mémoire élastique peuvent affecter l'exécution du job.
  • Les contrôles de mémoire YAML peuvent ne pas empêcher les erreurs OOM lorsque les processus consomment de la mémoire de manière agressive.

Protection de la mémoire Dataproc

Lorsqu'une VM de cluster Dataproc est sous pression sur la mémoire, la protection de la mémoire Dataproc met fin aux processus ou aux conteneurs jusqu'à ce que la condition OOM soit supprimée.

Une protection de la mémoire Dataproc est fournie pour les nœuds de cluster suivants dans les versions d'image Dataproc sur Compute Engine suivantes:

Rôle 1,5 2.0 2.1
VM maître 1.5.74+ 2.0.48+ tous
VM de nœud de calcul Non disponible 2.0.76+ 2.1.24+
VM du pool de pilotes Non disponible 2.0.76+ 2.1.24+

Identifier les arrêts de protection de la mémoire Dataproc

  • Les processus pour lesquels la protection de la mémoire de Dataproc met fin à la sortie avec le code 137 ou 143
  • Arrêt d'un nœud de calcul :
    • Dataproc incrémente la métrique cumulée dataproc.googleapis.com/node/problem_count et définit reason sur ProcessKilledDueToMemoryPressure.
    • Si Cloud Logging est activé, Dataproc écrit un journal google.dataproc.oom-killer avec le message "Un processus est arrêté en raison de la pression de la mémoire: [nom du processus]".
    • Si un conteneur YAML est arrêté, Dataproc écrit le message suivant dans le gestionnaire de ressources YAML: "[ID du conteneur] a quitté avec le code 137, ce qui signifie potentiellement une pression de mémoire sur [ID de nœud]".
  • Arrêt du nœud maître ou du pool de pilotes: le pilote de tâches échoue avec l'erreur Driver received SIGTERM/SIGKILL signal and exited with [INT] code.

Solutions OOM

Cette section fournit des recommandations concernant l'arrêt de tâches et de conteneurs pouvant résulter de problèmes OOM.

La tâche échoue avec le message d'erreur suivant : "Le pilote a reçu le signal SIGTERM/SIGKILL et s'est arrêté avec le code [INT]"

Recommandations :

  • Si les clusters disposent d'un pool de pilotes, augmentez la valeur driver-required-memory-mb pour utiliser la mémoire des tâches quotidiennes.
  • Si le cluster ne comporte pas de pool de pilotes, recréez-le en diminuant le nombre maximal de tâches simultanées, calculé comme suit : (total master memory in MB - 3584MB) / driver-size-mb. Vous pouvez réduire ce nombre comme suit :
    • Définir dataproc:dataproc.scheduler.max-concurrent-jobs, ou
    • Définir un nombre plus élevé de dataproc:dataproc.scheduler.driver-size-mb (la valeur par défaut est 1024MB).
  • Envisagez d'utiliser un type de machine nœud maître avec davantage de mémoire.

Sortie du conteneur avec le code de sortie 137 ou 143

Recommandations :

  • Si la protection de la mémoire Dataproc a mis fin au conteneur (consultez la section Identifier les arrêts de la protection de la mémoire Dataproc):

    • Vérifiez que les tailles de conteneurs sont correctement configurées.
    • Envisagez de diminuer yarn.nodemanager.resource.memory-mb. Cette propriété contrôle la quantité de mémoire utilisée pour planifier les conteneurs YAML.
    • Si les conteneurs de tâches échouent systématiquement, vérifiez si le décalage de données entraîne une utilisation accrue de conteneurs spécifiques. Si tel est le cas, repartitionnez la tâche ou augmentez la taille des nœuds de calcul pour répondre aux besoins en mémoire supplémentaires.