Passer au contenu

Comment résoudre l’exception « java.lang.OutOfMemoryError: GC overhead limit exceeded » dans Amazon EMR ?

Lecture de 3 minute(s)
0

Je souhaite résoudre l’exception « java.lang.OutOfMemoryError: GC overhead limit exceeded. » dans Amazon EMR.

Brève description

Le service NameNode utilise la mémoire pour stocker les objets d'espace de noms et les métadonnées des fichiers stockés dans le système de fichiers distribué Hadoop (HDFS). Plus vous avez de fichiers dans HDFS, plus NameNode utilise de mémoire.

Lorsque la taille du tas NameNode est insuffisante par rapport à la quantité de données HDFS du cluster, vous recevez l’erreur « java.lang.OutOfMemoryError » : GC overhead limit exceeded ». Pour éviter les exceptions de mémoire insuffisante, augmentez la taille du tas.

Résolution

Vérifier les journaux pour confirmer l'erreur

Procédez comme suit :

  1. Utilisez SSH pour vous connecter au nœud primaire.

  2. Pour vérifier l'état du service NameNode, exécutez la commande suivante sur le nœud primaire :

    initctl list

    Lorsque le service NameNode s'arrête, vous recevez la sortie suivante :

    hadoop-hdfs-namenode stop/waiting
  3. Pour confirmer l'exception OutofMemory, consultez le journal NameNode à l'adresse /var/log/hadoop-hdfs/hadoop-hdfs-namenode-ip-####.out.
    Remarque : Remplacez #### par l'adresse IP privée du nœud primaire.
    Lorsque le service NameNode échoue en raison d'une exception OutOfMemory, vous recevez une sortie similaire à l'exemple suivant :

    # java.lang.OutOfMemoryError: GC overhead limit exceeded# -XX:OnOutOfMemoryError="kill -9 %p
    kill -9 %p

Augmenter la taille du tas NameNode

Important : Ce changement de configuration requiert le redémarrage du service NameNode. Assurez-vous qu'aucune application n'effectue d'opérations de lecture ou d'écriture HDFS lorsque vous augmentez la taille du tas NameNode.

Amazon EMR versions 5.21.0 et ultérieures

Pour augmenter la taille du tas, fournissez un objet de configuration hadoop-env pour le groupe d'instances d'un cluster en cours d'exécution. Vous pouvez également ajouter l'objet de configuration lorsque vous lancez un nouveau cluster. Choisissez une taille adaptée à votre charge de travail.

L'exemple d'objet de configuration suivant augmente la taille du tas de 1 Go à 2 Go :

[
    {
        "Classification": "hadoop-env",
        "Properties": {},
        "Configurations": [
            {
                "Classification": "export",
                "Properties": {
                    "HADOOP_NAMENODE_HEAPSIZE": "2048"
                },
                "Configurations": []
            }
        ]
    }
]

Amazon EMR applique vos nouvelles configurations et redémarre correctement le processus NameNode.

Amazon EMR versions 5.20.0 et antérieures

Procédez comme suit :

  1. Utilisez SSH pour vous connecter au nœud primaire.

  2. Dans le fichier /etc/hadoop/conf/hadoop-env.sh, augmentez la taille du tas NameNode :

    export HADOOP_NAMENODE_HEAPSIZE=2048

    Remarque : Remplacez 2048 par la taille de tas requise.

  3. Enregistrez vos modifications.

  4. Pour redémarrer le service NameNode, exécutez les commandes suivantes :

    sudo stop hadoop-hdfs-namenode; sudo start hadoop-hdfs-namenode
  5. Pour vérifier que le processus NameNode est en cours d'exécution, exécutez la commande suivante :

    initctl list

    Sortie attendue :

    hadoop-hdfs-namenode start/running, process 6324
  6. Pour vérifier que les commandes HDFS fonctionnent, exécutez la commande suivante :

    hdfs dfs -ls /

    Sortie attendue :

    Found 4 itemsdrwxr-xr-x   - hdfs hadoop          0 2019-09-26 14:02 /apps
    drwxrwxrwt   - hdfs hadoop          0 2019-09-26 14:03 /tmp
    drwxr-xr-x   - hdfs hadoop          0 2019-09-26 14:02 /user
    drwxr-xr-x   - hdfs hadoop          0 2019-09-26 14:02 /var
  7. Surveillez le cluster après avoir modifié la configuration.

Informations connexes

Configurer les applications

Comment résoudre les exceptions d'espace de tas Java Hive « OutOfMemoryError » sur Amazon EMR qui se produisent lorsque Hive affiche les résultats de la requête ?

AWS OFFICIELA mis à jour il y a 5 mois