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

8 minutos de lectura
0

El servicio NameNode entra en modo seguro cuando intento ejecutar un trabajo de Apache Hadoop o Apache Spark en un clúster de Amazon EMR. Intenté desactivar el modo seguro, pero vuelve a activarse de inmediato. Quiero sacar a NameNode del modo seguro.

Descripción breve

Al ejecutar un trabajo de Apache Hadoop o Apache Spark en un clúster de Amazon EMR, es posible que reciba uno 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. NamenodeHostName:ip-xxx-xx-xx-xx.ec2.internal).

El modo seguro para NameNode es un modo de solo lectura para el clúster del Sistema de archivos distribuido de Hadoop (HDFS). En modo seguro, no puede realizar ninguna modificación en el sistema de archivos ni en los bloques. Cuando DataNodes haya informado de que la mayoría de los bloques del sistema de archivos están disponibles, NameNode abandonará automáticamente el modo seguro. Sin embargo, puede que NameNode entre en modo seguro por los siguientes motivos:

  • El espacio disponible es inferior al espacio necesario para el directorio de almacenamiento del NameNode. La cantidad de espacio necesaria para el directorio del NameNode se define en el parámetro dfs.namenode.resource.du.reserved.
  • El NameNode no puede cargar FsImage ni EditLog en la memoria.
  • El NameNode no ha recibido el informe de bloqueo del DataNode.
  • Es posible que algunos nodos del clúster estén inactivos. Esto hace que los bloques de los nodos no estén disponibles.
  • Es posible que algunos bloques estén dañados.

Compruebe la causa raíz del problema en la ubicación de registro del NameNode /var/log/hadoop-hdfs/.

Resolución

Antes de salir del modo seguro, confirme que sabe y comprende por qué el NameNode está bloqueado en modo seguro. Revise el estado de todos los DataNodes y los registros de NameNode.

Importante: En algunos casos, desactivar manualmente el modo seguro puede provocar la pérdida de datos.

Para desactivar manualmente el modo seguro, ejecute el siguiente comando:

sudo -u hdfs hadoop dfsadmin -safemode leave

Según la causa principal del error, complete uno o más de los siguientes pasos de solución de problemas para desactivar el modo seguro.

Cambiar a un clúster con varios nodos principales

Los puntos de comprobación no son automáticos en los clústeres que tienen un único nodo principal. Esto significa que los registros de edición de HDFS no realizan una copia de seguridad 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. Se recomienda eliminar manualmente los registros de edición de un clúster con un solo nodo principal. Si no elimina manualmente los registros de edición, es posible que los registros ocupen todo el espacio en disco de /mnt. Para resolver este problema, lance un clúster con varios nodos principales. Los clústeres con varios nodos principales admiten la alta disponibilidad del NameNode de HDFS. La alta disponibilidad del NameNode resuelve el problema de los puntos de comprobación.

Para obtener más información, consulte Plan and configure primary nodes (Planificación y configuración de nodos principales).

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 para /mnt cae a un valor inferior al valor establecido en dfs.namenode.resource.du.reserved, el NameNode entra en modo seguro. El valor predeterminado de dfs.namenode.resource.du.reserved es de 100 MB. Cuando el 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 necesite, siga estos pasos:

1.    Conéctese al nodo principal mediante SSH.

2.    Compruebe los registros del NameNode y verifique que está en modo seguro porque no hay suficiente espacio en disco. Estos registros se encuentran en /var/log/hadoop-hdfs. Si el espacio en disco es suficiente, los registros pueden tener un aspecto similar al siguiente registro:

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 el espacio en disco no es suficiente, los registros pueden tener un aspecto similar al siguiente registro:

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 el 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.

Si el directorio in/mnt/namenode/current utiliza una gran cantidad de espacio en un clúster con un nodo principal, cree una nueva instantánea (FsImage). A continuación, elimine los registros de edición antiguos.

Por ejemplo, ejecute un script que realiza las siguientes acciones:
Genera una nueva instantánea.
Realiza copias de seguridad de los registros de edición antiguos en un bucket de Amazon Simple Storage Service (Amazon S3).
Elimina los registros de edición.

Ejemplo de script:

#!/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

Nota: El script anterior no elimina los registros de las ediciones en curso.

5.    Compruebe la cantidad de espacio disponible en disco en /mnt. Si el espacio disponible supera los 100 MB, vuelva a comprobar el estado del modo seguro. 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 aún tiene menos de 100 MB de espacio disponible, realice una o más de las siguientes acciones:

Eliminar más archivos

1.    Conéctese al nodo principal 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é carpeta de archivos ocupa el espacio en disco, elimine estos archivos. Asegúrese de eliminar solo los archivos que ya no necesita. Los archivos de registro comprimidos de /mnt/var/log/hadoop-hdfs/ y /mnt/var/log/hadoop-yarn/ ya tienen copias de seguridad en el bucket de registro de Amazon S3. Estos archivos de registro son buenos candidatos para su eliminación.

6.    Después de eliminar los archivos innecesarios, verifique de nuevo el estado del modo seguro. 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

Comprobar si hay bloques o archivos dañados o que faltan

1.    Ejecute el siguiente comando para ver un informe que lo ayude a comprobar el estado del clúster. El informe también proporciona un porcentaje de bloques poco replicados y un recuento de réplicas que faltan.

hdfs fsck /

2.    Para cada archivo de la lista, ejecute el siguiente comando para localizar el DataNode de cada bloque del archivo:

hdfs fsck example_file_name -locations -blocks -files

Nota: Sustituya example_file_name por el nombre de su archivo.

Los mensajes que ve son similares a los siguientes:

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!

En los mensajes anteriores, puede encontrar el DataNode que almacena el bloque. Por ejemplo: “192.168.0.2”. A continuación, puede ver los registros de ese DataNode para buscar errores relacionados con el ID del bloque (blk_xxx). Los nodos a menudo se terminan, lo que hace que falten bloques.

3.    Para eliminar los archivos dañados, salga del modo seguro. A continuación, ejecute el siguiente comando:

hdfs dfs -rm example_file_name

Nota: Sustituya example_file_name por el nombre de su archivo.

Utilizar las métricas de CloudWatch para supervisar el estado de HDFS

Las siguientes métricas de Amazon CloudWatch pueden ayudarlo a monitorear las posibles causas de que el NameNode entre en modo seguro:

  • HDFSUtilization: porcentaje de almacenamiento de HDFS que se utiliza.
  • MissingBlocks: número de bloques en los que HDFS no tiene réplicas. Estos pueden ser bloques corruptos.
  • UnderReplicatedBlocks: número de bloques que se deben replicar una o más veces.

Información relacionada

HDFS Users Guide (Guía del usuario de HDFS) (del sitio web de Apache Hadoop)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año