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:
- En fonction d'un sondage (ancienne version)
- Strict
- 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
ou143
- Arrêt d'un nœud de calcul :
- Dataproc incrémente la métrique cumulée
dataproc.googleapis.com/node/problem_count
et définitreason
surProcessKilledDueToMemoryPressure
. - 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]".
- Dataproc incrémente la métrique cumulée
- 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 est1024MB
).
- Définir
- 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.