Comment désactiver le mode sans échec pour le service NameNode sur mon cluster Amazon EMR ?

Dernière mise à jour : 03-09-2021

Lorsque j'essaie d'exécuter une tâche Apache Hadoop ou Apache Spark sur un cluster Amazon EMR, je reçois l'un des messages d'erreur suivants :

  • Impossible de créer file/user/test.txt._COPYING_. Le nœud de nom est en mode sans échec.
  • org.apache.hadoop.hdfs.server.namenode.SafeModeException : Impossible de supprimer /user/hadoop/.sparkStaging/application_15xxxxxxxx_0001. Le nœud de nom est en mode sans échec. Il a été activé manuellement. Utilisez « hdfs dfsadmin -safemode leave » pour désactiver le mode sans échec. NamenodeHostName:ip-xxx-xx-xx-xx.ec2.internal

J'ai essayé de désactiver le mode sans échec, mais il se réactive immédiatement. Je veux faire sortir NameNode du mode sans échec.

Brève description

Le mode sans échec pour NameNode est essentiellement un mode en lecture seule pour le cluster de système de fichiers distribué Hadoop (HDFS). NameNode peut entrer en mode sans échec pour différentes raisons, telles que :

  • L'espace disponible est inférieur à la quantité d'espace requise pour le répertoire de stockage NameNode. La quantité d'espace requise pour le répertoire NameNode est définie dans le paramètre dfs.namenode.resource.du.reserved.
  • NameNode n'est pas en mesure de chargerFsImage et EditLog en mémoire.
  • NameNode n'a pas reçu le rapport de blocage provenant de DataNode.

Vérifiez les journaux NameNode pour trouver la cause racine du problème dans l'emplacement du journal /var/log/hadoop-hdfs/.

Solution

Essayez une ou plusieurs des options de dépannage suivantes en fonction de votre cas d'utilisation.

Passer à un cluster disposant de plusieurs nœuds principaux

La vérification des points de contrôle n'est pas automatique dans les clusters dotés d'un seul nœud principal. Cela signifie que les journaux de modification HDFS ne sont pas sauvegardés sur un nouvel instantané (FsImage) et supprimés. HDFS utilise les journaux de modification pour enregistrer les modifications du système de fichiers entre les instantanés. Si vous possédez un cluster disposant d'un seul nœud principal et que vous ne supprimez pas les journaux de modification manuellement, ces journaux peuvent éventuellement utiliser tout l'espace disque in/mnt. Pour résoudre ce problème, lancez un cluster disposant de plusieurs nœuds principaux. Les clusters disposant de plusieurs nœuds principaux prennent en charge,la haute disponibilité pour HDFS NameNode, ce qui résout le problème de la vérification du point de contrôle. Pour en savoir plus, consultez Planifier et configurer des nœuds principaux.

Supprimer les fichiers inutiles de /mnt

L'espace disque minimum disponible pour /mnt est spécifié par le paramètre dfs.namenode.resource.du.reserved. Lorsque la quantité de disque disponible dans le répertoire /mnt tombe à une valeur inférieure à la valeur définie dans dfs.namenode.resource.du.reserved, NameNode entre en mode sans échec. La valeur par défaut de dfs.namenode.resource.du.reserved est de 100 Mo. Lorsque NameNode est en mode sans échec, aucune modification du système de fichiers ou des blocs n'est autorisée. Par conséquent, la suppression des fichiers inutiles de /mnt peut aider à résoudre le problème. Pour supprimer les fichiers dont vous n'avez plus besoin, procédez comme suit :

1.    Connectez-vous au nœud principal à l'aide de SSH.

2.    Pour vérifier que NameNode est en mode sans échec en raison d'un espace disque insuffisant, vérifiez les journaux NameNode. Ces journaux se trouvent dans /var/log/hadoop-hdfs. Les journaux peuvent ressembler à ce qui suit si l'espace disque est suffisant :

2020-08-28 19:14:43,540 WARN org.apache.hadoop.hdfs.server.namenode.NameNodeResourceChecker (org.apache.hadoop.hdfs.server.namenode.FSNamesystem$NameNodeResourceMonitor@5baaae4c): Space available on volume '/dev/xvdb2' is 76546048, which is below the configured reserved amount 104857600

Les journaux peuvent ressembler à ce qui suit si l'espace disque est insuffisant :

2020-09-28 19:14:43,540 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem (org.apache.hadoop.hdfs.server.namenode.FSNamesystem$NameNodeResourceMonitor@5baaae4c): NameNode low on available disk space. Already in safe mode.

3.    Vérifiez que NameNode est toujours en mode sans échec en exécutant la commande suivante :

[root@ip-xxx-xx-xx-xxx mnt]# hdfs dfsadmin -safemode get
Safe mode is ON

4.    Supprimez les fichiers inutiles de /mnt. Par exemple, sur un cluster disposant d'un nœud principal, si le répertoire dans /mnt/namenode/current utilise une grande quantité d'espace, vous pouvez créer un nouvel instantané (FsImage), puis supprimer les anciens journaux de modification.

L'exemple de script suivant génère un nouvel instantané, sauvegarde les anciens journaux de modification dans un compartiment Amazon Simple Storage Service (Amazon S3), puis supprime les journaux de modification. Le script ne supprime pas les journaux des modifications en cours. Exécutez le script suivant en tant qu'utilisateur hadoop :

#!/bin/bash
hdfs dfsadmin -safemode enter
hdfs dfsadmin -saveNamespace
sudo su - root -c "hdfs dfs -put /mnt/namenode/current/*edits_[0-9]* s3://doc-example-bucket/backup-hdfs/"
sudo su - root -c "rm -f /mnt/namenode/current/*edits_[0-9]*"
sudo su - root -c "rm -f /mnt/namenode/current/seen*"
hdfs dfsadmin -safemode leave

5.    Vérifiez la quantité d'espace disque disponible dans /mnt. Si l'espace disponible est supérieur à 100 Mo, vérifiez à nouveau l'état du mode sans échec, puis désactivez le mode sans échec :

[hadoop@ip-xxx-xx-xx-xxx ~]$ hdfs dfsadmin -safemode get
Safe mode is ON
[hadoop@ip-xxx-xx-xx-xxx ~]$ hdfs dfsadmin -safemode leave
Safe mode is OFF

Si /mnt dispose toujours de moins de 100 Mo d'espace disponible, effectuez l'une ou plusieurs des opérations suivantes :

  • Supprimez d'autres fichiers comme expliqué dans la section suivante.
  • Augmentez la taille du volume /mnt.

Supprimer d'autres fichiers

1.    Connectez-vous au nœud principal à l'aide de SSH.

2.    Parcourez le répertoire /mnt :

cd /mnt

3.    Déterminez quels dossiers utilisent le plus d'espace disque :

sudo du -hsx * | sort -rh | head -10

4.    Continuez à enquêter jusqu'à ce que vous trouviez la source du problème de l'espace disque. Par exemple, si le dossier var utilise une grande quantité d'espace disque, vérifiez les sous-dossiers les plus volumineux qui se trouvent dans var :

cd var
sudo du -hsx * | sort -rh | head -10

5.    Une fois que vous avez déterminé quel fichier ou dossier prend beaucoup d'espace disque, choisissez de supprimer ces fichiers. Assurez-vous de ne supprimer que les fichiers dont vous n'avez plus besoin. Les fichiers journaux compressés dans /mnt/var/log/hadoop-hdfs/ et /mnt/var/log/hadoop-yarn/ qui sont déjà sauvegardés dans le compartiment de journalisation d'Amazon S3 se prêtent bien à la suppression.

6.    Après avoir supprimé les fichiers inutiles, vérifiez à nouveau l'état du mode sans échec, puis désactivez-le :

[hadoop@ip-xxx-xx-xx-xxx ~]$ hdfs dfsadmin -safemode get
Safe mode is ON
[hadoop@ip-xxx-xx-xx-xxx ~]$ hdfs dfsadmin -safemode leave
Safe mode is OFF

Documentation Hadoop pour le guide de l'utilisateur HDFS

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?