Passer au contenu

Comment désactiver Safemode pour le service NameNode sur mon cluster Amazon EMR ?

Lecture de 7 minute(s)
0

Le service NameNode passe en mode Safemode lorsque j'essaie d'exécuter une tâche Apache Hadoop ou Apache Spark sur un cluster Amazon EMR. J'ai désactivé le mode sécurisé, mais il est immédiatement réactivé.

Brève description

Lorsque vous exécutez une tâche Apache Hadoop ou Apache Spark sur un cluster Amazon EMR, l'un des messages d'erreur suivants peut s'afficher :

  • « Cannot create file/user/test.txt._COPYING_. Name node is in safe mode. »
  • « org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /user/hadoop/.sparkStaging/application_15########_0001. Le nœud Name est en mode sécurisé. Il a été activé manuellement. Utilisez « hdfs dfsadmin -safemode leave » pour désactiver le mode sécurisé. NamenodeHostName:ip-###-##-##-##.ec2.internal »

Safemode pour le NameNode est un mode en lecture seule pour le cluster du système de fichiers distribué Hadoop (HDFS). En Safemode, vous ne pouvez apporter aucune modification au système de fichiers ou aux blocs.

Une fois que les DataNodes signalent que la plupart des blocs du système de fichiers sont disponibles, le NameNode quitte automatiquement Safemode. Cependant, le NameNode peut passer à nouveau en Safemode pour les raisons suivantes :

  • L'espace disponible est inférieur à l'espace requis pour le répertoire de stockage NameNode. Le paramètre dfs.namenode.resource.du.reserved définit l'espace requis pour le répertoire NameNode.
  • Le NameNode ne peut pas charger FsImage et EditLog en mémoire.
  • Le NameNode n'a pas reçu le rapport de blocage du DataNode.
  • Certains nœuds du cluster sont peut-être en panne et les blocs des nœuds deviennent indisponibles.
  • Certains blocs sont peut-être corrompus.

Recherchez la cause racine du problème à l'emplacement du journal NameNode, /var/log/hadoop-hdfs/.

Résolution

Avant de quitter Safemode, vérifiez que vous avez identifié la raison pour laquelle le NameNode est bloqué en Safemode. Vérifiez l'état de tous les DataNodes et des journaux NameNode.

Important : Dans certains cas, lorsque vous désactivez manuellement Safemode, vous risquez de perdre des données.

Pour désactiver manuellement Safemode, exécutez la commande suivante :

sudo -u hdfs hadoop dfsadmin -safemode leave

En fonction de la cause racine de l'erreur, effectuez une ou plusieurs des étapes de dépannage suivantes pour désactiver Safemode.

Passer à un cluster comportant plusieurs nœuds principaux

Le point de contrôle n'est pas automatique dans les clusters dotés d'un seul nœud principal. HDFS ne peut donc pas sauvegarder les journaux de modifications sur un nouvel instantané (FSImage) et les supprimer automatiquement. HDFS utilise des journaux d'édition pour enregistrer les modifications du système de fichiers entre les instantanés. Il est recommandé de supprimer manuellement les journaux d’édition d'un cluster comportant un seul nœud principal. Si vous ne supprimez pas manuellement les journaux d’édition, ceux-ci peuvent utiliser tout l'espace disque du répertoire /mnt. Pour résoudre ce problème, lancez un cluster avec plusieurs nœuds principaux. Les clusters comportant plusieurs nœuds principaux prennent en charge la haute disponibilité de HDFS NameNode.

Supprimer les fichiers inutiles de /mnt

Le paramètre dfs.namenode.resource.du.reserved spécifie l'espace disque minimum disponible pour /mnt. Lorsque la quantité d'espace disque disponible pour /mnt chute à une valeur inférieure à la valeur définie dans dfs.namenode.resource.du.reserved, le NameNode passe en Safemode. La valeur par défaut pour dfs.namenode.resource.du.reserved est de 100 Mo. Lorsque Safemode est activé, NameNode bloque toutes les modifications du système de fichiers et des blocs. Pour résoudre ce problème, vous devez supprimer les fichiers inutiles de /mnt.

Pour supprimer les fichiers dont vous n'avez plus besoin, procédez comme suit :

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

  2. Consultez les journaux NameNode pour vérifier que le NameNode est en Safemode en raison d'un espace disque insuffisant. Si l'espace disque est suffisant, les journaux ressemblent à l'exemple suivant :

    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

    Si l'espace disque est insuffisant, les journaux ressemblent à l'exemple suivant :

    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. Pour vérifier que le NameNode est toujours en Safemode, exécutez la commande suivante :

    [root@ip-###-##-##-### mnt]# hdfs dfsadmin -safemode getSafe mode is ON
  4. Supprimez les fichiers inutiles de /mnt.Si le répertoire in/mnt/namenode/current utilise une grande quantité d'espace sur un cluster avec un nœud principal, créez un nouvel instantané (FsImage). Puis, supprimez les anciens journaux d'édition.

  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 de Safemode.

    [hadoop@ip-###-##-##-### ~]$ hdfs dfsadmin -safemode get

    Exemple de sortie :

    Safe mode is ON
  6. Désactiver Safemode :

    [hadoop@ip-###-##-##-### ~]$ hdfs dfsadmin -safemode leave

    Exemple de sortie :

    Safe mode is OFF

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

Supprimer d'autres fichiers

Procédez comme suit :

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

  2. Accédez au répertoire /mnt :

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

    sudo du -hsx * | sort -rh | head -10
  4. Vérifiez les sous-dossiers les plus volumineux dans les dossiers qui utilisent le plus d'espace disque. Par exemple, si le dossier var utilise une grande quantité d'espace disque, vérifiez les sous-dossiers les plus volumineux de var :

    cd varsudo du -hsx \* | sort -rh | head -10
  5. Supprimez d'abord les fichiers les plus volumineux. Assurez-vous de ne supprimer que les fichiers dont vous n'avez plus besoin. Le compartiment de journalisation Amazon S3 stocke déjà des copies de sauvegarde des fichiers journaux compressés depuis /mnt/var/log/hadoop-hdfs/ et /mnt/var/log/hadoop-yarn/. Vous pouvez supprimer ces fichiers journaux en toute sécurité.

  6. Après avoir supprimé les fichiers inutiles, vérifiez à nouveau l'état de Safemode. Puis, désactivez Safemode :

    [hadoop@ip-###-##-##-### ~]$ hdfs dfsadmin -safemode get

    Exemple de sortie :

    Safe mode is ON
  7. Désactiver Safemode :

    [hadoop@ip-###-##-##-### ~]$ hdfs dfsadmin -safemode leave

    Exemple de sortie :

    Safe mode is OFF

Vérifiez la présence de blocs et de fichiers corrompus ou manquants

Procédez comme suit :

  1. Pour vérifier l'état du cluster, exécutez la commande suivante :
    hdfs fsck /
    Remarque : Le rapport de sortie indique également le pourcentage de blocs sous-répliqués et le nombre de réplicas manquants.
  2. Pour localiser le DataNode pour chaque bloc du fichier, exécutez la commande suivante pour chaque fichier de la liste :
    hdfs fsck example_file_name -locations -blocks -files
    Remarque : Remplacez example_file_name par votre nom de fichier.
    Exemple de sortie :
    0. BP-762523015-192.168.0.2-1480061879099:blk_1073741830_1006 len=134217728 MISSING!
    1. BP-762523015-192.168.0.2-1480061879099:blk_1073741831_1007 len=134217728 MISSING!
    2. BP-762523015-192.168.0.2-1480061879099:blk_1073741832_1008 len=70846464 MISSING!
    L'exemple de sortie précédent montre quel DataNode stocke le bloc. Par exemple, 192.168.0.2. Vous pouvez consulter les journaux du DataNode pour détecter toute erreur liée à l'ID de bloc spécifique (blk_##).
    Remarque : Les blocs manquants se produisent souvent parce que les nœuds sont résiliés de manière inattendue.
  3. Pour supprimer les fichiers endommagés, quittez Safemode et exécutez la commande suivante :
    hdfs dfs -rm example_file_name
    Remarque : Remplacez example_file_name par votre nom de fichier.

Utilisez les métriques CloudWatch pour surveiller l'état du HDFS

Utilisez les métriques Amazon CloudWatch suivantes pour identifier les raisons pour lesquelles le NameNode passe en Safemode :

  • Pour identifier le pourcentage de stockage HDFS utilisé, consultez la section HDFSUtilization.
  • Pour identifier le nombre de blocs dans lesquels HDFS ne possède aucun réplica, consultez MissingBlocks. Il peut s'agir de blocs corrompus.
  • Pour identifier le nombre de blocs nécessitant une réplication, consultez la section UnderReplicatedBlocks.

Informations connexes

Guide de l'utilisateur de HDFS (depuis le site Web d'Apache Hadoop)

AWS OFFICIELA mis à jour il y a 3 mois