Comment puis-je arrêter le cache utilisateur d’une tâche Hadoop ou Spark afin que le cache n’utilise pas trop d’espace disque dans Amazon EMR ?

Lecture de 4 minute(s)
0

Le cache utilisateur de ma tâche Apache Hadoop ou Apache Spark utilise tout l’espace disque de la partition. La tâche Amazon EMR échoue ou le service HDFS NameNode est en mode sécurisé.

Brève description

Sur un cluster Amazon EMR, YARN est configuré pour permettre aux tâches d’écrire des données de cache dans /mnt/yarn/usercache. Lorsque vous traitez une grande quantité de données ou que vous exécutez plusieurs tâches simultanées, le système de fichiers /mnt peut se remplir. Cela entraîne l’échec du gestionnaire de nœuds sur certains nœuds, et la tâche se bloque ou échoue.

Pour résoudre ce problème, appliquez l’une des méthodes suivantes :

  • Si vous n’avez pas de tâches de longue durée ou de streaming, ajustez les paramètres de conservation du cache utilisateur pour YARN NodeManager.
  • Si vous avez des tâches de longue durée ou de streaming, augmentez verticalement les volumes Amazon Elastic Block Store (Amazon EBS).

Résolution

Ajuster les paramètres de conservation du cache utilisateur pour NodeManager

Les attributs suivants définissent les paramètres de nettoyage du cache :

  • yarn.nodemanager.localizer.cache.cleanup.interval-ms : il s’agit de l’intervalle de nettoyage du cache. La valeur par défaut est de 600 000 millisecondes. Après cet intervalle, lorsque la taille du cache dépasse la valeur définie dans yarn.nodemanager.localizer.cache.target-size-mb, les fichiers non utilisés par les conteneurs en cours d'exécution sont supprimés.
  • yarn.nodemanager.localizer.cache.target-size-mb : il s’agit de l’espace disque maximal autorisé pour le cache. La valeur par défaut est de 10 240 Mo. Lorsque la taille du disque de cache dépasse cette valeur, les fichiers non utilisés par les conteneurs en cours d'exécution sont supprimés selon l'intervalle défini dans yarn.nodemanager.localizer.cache.cleanup.interval-ms.

Pour définir l’intervalle de nettoyage et la taille maximale de l’espace disque sur votre cluster, procédez comme suit :

  1. Ouvrez /etc/hadoop/conf/yarn-site.xml sur chaque nœud principal et nœud de tâche.

  2. Réduisez les valeurs de yarn.nodemanager.localizer.cache.cleanup.interval et yarn.nodemanager.localizer.cache.target-size-mb pour chaque nœud principal et nœud de tâche.

    Exemple :

    sudo vim /etc/hadoop/conf/yarn-site.xmlyarn.nodemanager.localizer.cache.cleanup.interval-ms 400000
    yarn.nodemanager.localizer.cache.target-size-mb 5120
  3. Exécutez les commandes suivantes sur chaque nœud principal et nœud de tâche pour redémarrer NodeManager :
    EMR 5.29 et versions antérieures

    sudo stop hadoop-yarn-nodemanager
    sudo start hadoop-yarn-nodemanager

    EMR 5.30.0 et versions ultérieures

    sudo stop hadoop-yarn-nodemanager.service  
    sudo systemctl start hadoop-yarn-nodemanager.service
  4. Pour définir l’intervalle de nettoyage et la taille maximale de l’espace disque sur un nouveau cluster au lancement, ajoutez un objet de configuration semblable au suivant :

    [
        {
          "Classification": "yarn-site",
         "Properties": {
           "yarn.nodemanager.localizer.cache.cleanup.interval-ms": "400000",
           "yarn.nodemanager.localizer.cache.target-size-mb": "5120"
          }
        }
    ]
    

    Le service de suppression ne s’opère pas sur les conteneurs en cours d’exécution. Cela signifie que même après avoir ajusté les paramètres de conservation du cache utilisateur, des données peuvent toujours déborder sur le chemin suivant et remplir le système de fichiers :

    {'yarn.nodemanager.local-dirs'}/usercache/user/appcache/application_id ,

Augmenter verticalement les volumes EBS sur les nœuds du cluster EMR

Pour augmenter le stockage sur un cluster EMR en cours d’exécution, consultez la page Augmentation verticale dynamique du stockage sur les clusters Amazon EMR.

Pour augmenter le stockage sur un nouveau cluster EMR, définissez une taille de volume plus importante lorsque vous créez le cluster EMR. Vous pouvez également effectuer cette opération lorsque vous ajoutez des nœuds à un cluster existant :

  • Amazon EMR versions 5.22.0 et ultérieures : la quantité de stockage EBS par défaut augmente en fonction de la taille de l’instance Amazon Elastic Compute Cloud (Amazon EC2). Pour en savoir plus sur la quantité de stockage par défaut et le nombre de volumes pour chaque type d’instance, consultez la page Stockage Amazon EBS par défaut pour les instances.
  • **Amazon EMR versions 5.21 et antérieures :**La taille du volume EBS par défaut est de 32 Go. 27 Go sont réservés à la ** partition ** /mnt. HDFS, YARN, le cache utilisateur et toutes les applications utilisent la partition /mnt. Augmentez la taille de votre volume EBS selon vos besoins. Vous pouvez également spécifier plusieurs volumes EBS montés en tant que /mnt1 ou /mnt2.

Pour les tâches de streaming Spark, vous pouvez également exécuter un RDD.unpersist() lorsque vous n’avez plus besoin des données. Vous pouvez également appeler explicitement System.gc() en Scala ou sc._jvm.System.gc() en Python pour démarrer le récupérateur de mémoire JVM et supprimer les fichiers de shuffle intermédiaires.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 mois