¿Cómo puedo desactivar el modo seguro para el servicio NameNode en mi clúster de Amazon EMR?

Última actualización: 03-09-2021

Cuando intento ejecutar un trabajo de Apache Hadoop o Apache Spark en un clúster de Amazon EMR, aparece alguno de los siguientes mensajes de error:

  • Cannot create file/user/test.txt._COPYING_. Name node is in safe mode. (No se puede crear file/user/test.txt._COPYING_. NameNode está en modo seguro).
  • org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /user/hadoop/.sparkStaging/application_15xxxxxxxx_0001. Name node is in safe mode. It was turned on manually. Use "hdfs dfsadmin -safemode leave" to turn safe mode off. NamenodeHostName:ip-xxx-xx-xx-xx.ec2.internal (org.apache.hadoop.hdfs.server.namenode.SafeModeException: no se puede eliminar /user/hadoop/.sparkStaging/application_15xxxxxxxx_0001. NameNode está en modo seguro. Se activó manualmente. Utilice “hdfs dfsadmin -safemode leave” para desactivar el modo seguro).

Intenté desactivar el modo seguro, pero vuelve a activarse de inmediato. Quiero sacar a NameNode del modo seguro.

Descripción breve

El modo seguro para NameNode es esencialmente un modo de solo lectura para el clúster de Hadoop Distributed File System (HDFS). NameNode podría ingresar en el modo seguro por diferentes motivos, como los siguientes:

  • El espacio disponible es inferior al espacio necesario para el directorio de almacenamiento de NameNode. La cantidad de espacio necesaria para el directorio de NameNode se define en el parámetro dfs.namenode.resource.du.reserved.
  • NameNode no puede cargar FsImage ni EditLog en la memoria.
  • NameNode no recibió el informe de bloqueo de DataNode.

Consulte los registros de NameNode para encontrar la causa raíz del problema en la ubicación del registro /var/log/hadoop-hdfs/.

Resolución

Pruebe una o más de las siguientes opciones de solución de problemas según su caso de uso.

Cambiar a un clúster con varios nodos maestros

Los puntos de comprobación no son automáticos en los clústeres que tienen un único nodo maestro. Esto significa que los registros de edición de HDFS no se respaldan en una nueva instantánea (FsImage) ni se eliminan. HDFS utiliza registros de edición para registrar los cambios en el sistema de archivos entre instantáneas. Si tiene un clúster con un único nodo maestro y no elimina los registros de edición de forma manual, estos registros pueden llegar a utilizar todo el espacio en disco en /mnt. Para resolver este problema, lance un clúster con varios nodos maestros. Los clústeres con varios nodos maestros admiten la alta disponibilidad de HDFS NameNode, lo que resuelve el problema de los puntos de comprobación. Para obtener más información, consulte Planificación y configuración de nodos maestros.

Eliminar archivos innecesarios de /mnt

El espacio en disco mínimo disponible para /mnt se especifica mediante el parámetro dfs.namenode.resource.du.reserved. Cuando la cantidad de espacio en disco disponible en el directorio /mnt cae a un valor inferior al establecido en dfs.namenode.resource.du.reserved, NameNode ingresa al modo seguro. El valor predeterminado de dfs.namenode.resource.du.reserved es de 100 MB. Cuando NameNode está en modo seguro, no se permiten modificaciones en el sistema de archivos ni en los bloques. Por lo tanto, eliminar los archivos innecesarios de /mnt podría ayudar a resolver el problema. Para eliminar los archivos que ya no necesita, haga lo siguiente:

1.    Conéctese al nodo maestro mediante SSH.

2.    Para comprobar que NameNode está en el modo seguro debido a que no hay suficiente espacio en el disco, verifique los registros de NameNode. Estos registros se encuentran en /var/log/hadoop-hdfs. Los registros pueden tener un aspecto similar al siguiente si el espacio en disco es suficiente:

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

Los registros pueden tener un aspecto similar al siguiente si el espacio en disco es insuficiente:

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.    Confirme que NameNode sigue en modo seguro a través del siguiente comando:

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

4.    Elimine los archivos innecesarios de /mnt. Por ejemplo, en un clúster con un nodo maestro, si el directorio en /mnt/namenode/current ocupa una gran cantidad de espacio, puede crear una nueva instantánea (FsImage) y, a continuación, eliminar los registros de edición antiguos.

El siguiente script de ejemplo genera una nueva instantánea, realiza una copia de seguridad de los registros de edición antiguos en un bucket de Amazon Simple Storage Service (Amazon S3) y, a continuación, elimina los registros de edición. El script no elimina los registros de las ediciones que están en curso. Ejecute el siguiente script como usuario de 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.    Compruebe la cantidad de espacio disponible en disco en /mnt. Si el espacio disponible es superior a 100 MB, verifique de nuevo el estado de modo seguro y, a continuación, desactive el modo seguro:

[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 todavía tiene menos de 100 MB de espacio disponible, realice una o más de las siguientes acciones:

  • Elimine más archivos, como se explica en la sección siguiente.
  • Aumente el tamaño del volumen /mnt.

Eliminar más archivos

1.    Conéctese al nodo maestro mediante SSH.

2.    Diríjase al directorio /mnt:

cd /mnt

3.    Determine qué carpetas ocupan más espacio en disco:

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

4.    Siga investigando hasta que encuentre el origen del problema del espacio en disco. Por ejemplo, si la carpeta var utiliza una gran cantidad de espacio en disco, verifique las subcarpetas de mayor tamaño de var:

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

5.    Después de determinar qué archivos o carpetas ocupan el espacio del disco, elija eliminar estos archivos. Asegúrese de eliminar solo los archivos que ya no necesita. Los archivos de registros comprimidos ubicados en /mnt/var/log/hadoop-hdfs/ y /mnt/var/log/hadoop-yarn/ de los que ya se ha realizado una copia de seguridad en el bucket de registro de Amazon S3 son buenos candidatos para la eliminación.

6.    Después de eliminar los archivos innecesarios, verifique de nuevo el estado de modo seguro y, a continuación, desactive el modo seguro:

[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

Documentación de Hadoop para la Guía del usuario de HDFS

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?