Come posso disattivare il servizio Safemode for NameNode sul mio cluster Amazon EMR?

Ultimo aggiornamento: 03-09-2021

Quando si prova a eseguire un processo Apache Hadoop o Apache Spark su un cluster Amazon EMR, viene visualizzato uno dei seguenti messaggi di errore:

  • Impossibile creare file/user/test.txt._COPYING_. Il nodo del nome è in modalità provvisoria.
  • org.apache.hadoop.hdfs.server.namenode.SafeModeException: Impossibile eliminare /user/hadoop/.sparkStaging/application_15xxxxxxxx_0001. Il nodo del nome è in modalità provvisoria. È stato attivato manualmente. Utilizzare "hdfs dfsadmin -safemode leave" per disattivare la modalità provvisoria. NamenodeHostName:ip-xxx-xx-xx-xx.ec2.internal

Ho provato a disattivare Safemode, ma si riattiva immediatamente. Voglio far uscire NameNode da Safemode.

Breve descrizione

Safemode for NameNode è essenzialmente una modalità di sola lettura per il cluster del file di sistema distribuito Hadoop (HDFS). NameNode potrebbe entrare in Safemode per diversi motivi, ad esempio i seguenti:

  • Lo spazio disponibile è inferiore alla quantità di spazio necessaria per la directory di archiviazione NameNode. La quantità di spazio necessaria per la directory NameNode è definita nel parametro dfs.namenode.resource.du.reserved.
  • NameNode non è in grado di caricare FsImage e EditLog in memoria.
  • NameNode non ha ricevuto il rapporto di blocco da DataNode.

Controlla i log NameNode per trovare la causa principale del problema nella posizione del log /var/log/hadoop-hdfs/.

Risoluzione

Prova una o più delle seguenti opzioni di risoluzione dei problemi in base al tuo caso d'uso.

Passaggio a un cluster con più nodi principali

Il checkpoint non è automatico nei cluster con un singolo nodo principale. Ciò significa che i log di modifica HDFS non vengono sottoposti a backup su un nuovo snapshot (FsImage) e poi rimossi. HDFS utilizza i log di modifica per registrare le modifiche al file system tra gli snapshot. Se si dispone di un cluster con un singolo nodo principale e non si rimuovono manualmente i log di modifica, questi log possono eventualmente utilizzare tutto lo spazio su disco in /mnt. Per risolvere il problema, avvia un cluster con più nodi principale. I cluster con più nodi principali supportano l'elevata disponibilità per HDFS NameNode, che risolve il problema del checkpoint. Per ulteriori informazioni, consulta Pianificazione e configurazione di nodi principali.

Rimozione dei file non necessari da /mnt

Lo spazio su disco minimo disponibile per /mnt è specificato dal parametro dfs.namenode.resource.du.reserved. Quando la quantità di disco disponibile nella directory /mnt scende al di sotto del valore impostato in dfs.namenode.resource.du.reserved, NameNode entra in Safemode. Il valore di default per dfs.namenode.resource.du.reserved è 100 MB. Quando NameNode è in Safemode, non sono consentite modifiche al filesystem o al blocco. Pertanto, la rimozione dei file non necessari da /mnt potrebbe aiutare a risolvere il problema. Per eliminare i file che non sono più necessari, procedi come segue:

1.    Connettiti al nodo principale utilizzando SSH.

2.    Per verificare che NameNode sia in Safemode a causa di spazio su disco insufficiente, consulta i log NameNode. Questi log si trovano in /var/log/hadoop-hdfs. Se lo spazio su disco è sufficiente, i log potrebbero essere simili ai seguenti:

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

Se lo spazio su disco è insufficiente, i log potrebbero essere simili ai seguenti:

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.    Verifica che NameNode sia ancora in Safemode emettendo il seguente comando:

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

4.    Elimina i file non necessari da /mnt. Ad esempio, su un cluster con un nodo principale, se la directory in /mnt/namenode/current utilizza una grande quantità di spazio, è possibile creare un nuovo snapshot (FsImage) e quindi rimuovere i vecchi log di modifica.

Lo script di esempio seguente genera un nuovo snapshot, esegue il backup dei vecchi log di modifica in un bucket Amazon Simple Storage Service (Amazon S3) e quindi rimuove i log di modifica. Lo script non rimuove i log per le modifiche in corso. Emetti il seguente script come utente 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.    Verifica la quantità di spazio disponibile su disco in /mnt. Se lo spazio disponibile è superiore a 100 MB, controlla di nuovo lo stato di Safemode, quindi disattiva Safemode:

[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

Se /mnt ha ancora meno di 100 MB di spazio disponibile, completa una o più delle seguenti operazioni:

Rimozione di altri file

1.    Connettiti al nodo principale utilizzando SSH.

2.    Passa alla directory /mnt:

cd /mnt

3.    Determina quali cartelle utilizzano la maggior parte dello spazio su disco:

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

4.    Continua a indagare finché non trovi l'origine del problema di spazio su disco. Ad esempio, se la cartella var utilizza una grande quantità di spazio su disco, controlla le sottocartelle più grandi in var:

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

5.    Dopo aver determinato quale file/cartella occupa spazio su disco, elimina questi file. Assicurati di eliminare solo i file che non ti servono più. I file di log compressi in /mnt/var/log/hadoop-hdfs/ e /mnt/var/log/hadoop-yarn/ di cui è già stato eseguito il backup nel bucket di registrazione di Amazon S3 sono buoni candidati per l'eliminazione.

6.    Dopo aver eliminato i file non necessari, controlla di nuovo lo stato di Safemode, quindi disattiva Safemode:

[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

Documentazione Hadoop per la Guida per gli utenti di HDFS

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?