Como desativo o modo de segurança para o serviço NameNode no meu cluster do Amazon EMR?

Última atualização: 03-09-2021

Quando tento executar um trabalho do Apache Hadoop ou Apache Spark em um cluster do Amazon EMR, recebo uma das seguintes mensagens de erro:

  • Cannot create file/user/test.txt._COPYING_. O NameNode está no modo de segurança.
  • org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /user/hadoop/.sparkStaging/application_15xxxxxxxx_0001. O NameNode está no modo de segurança. Ele foi ativado manualmente. Use “hdfs dfsadmin -safemode leave” para desativar o modo de segurança. NamenodeHostName:ip-xxx-xx-xx-xx.ec2.internal

Eu tentei desativar o modo de segurança, mas ele retorna imediatamente. Eu quero tirar o NameNode do modo de segurança.

Breve descrição

O modo de segurança para o NameNode é essencialmente um modo somente leitura para o cluster do Hadoop Distributed File System (HDFS). O NameNode pode entrar no modo de segurança por diferentes motivos, como os seguintes:

  • O espaço disponível é menor do que a quantidade de espaço necessária para o diretório de armazenamento do NameNode. A quantidade de espaço necessária para o diretório NameNode é definida no parâmetro dfs.namenode.resource.du.reserved.
  • O NameNode não consegue carregar a FSImage e o EditLog na memória.
  • O NameNode não recebeu o relatório de bloco do DataNode.

Confira os logs do NameNode para encontrar a causa-raiz do problema no local do log /var/log/hadoop-hdfs/.

Resolução

Experimente uma ou mais das seguintes opções de solução de problemas com base no seu caso de uso.

Mude para um cluster com vários nós principais

A definição de ponto de verificação não é automática em clusters com um nó principal único. Dessa forma, os logs de edição do HDFS não terão backup em um novo snapshot (FSImage) nem serão removidos. O HDFS usa logs de edição para registrar alterações em sistemas de arquivos entre snapshots. Se você tiver um cluster com um único nó principal e não remover os logs de edição manualmente, esses logs poderão eventualmente usar todo o espaço em disco in/mnt. Para solucionar esse problema, inicie um cluster com vários nós principais. Os clusters com vários nós principais são compatíveis com alta disponibilidade para o NameNode HDFS, o que resolve o problema de definição de ponto de verificação. Para obter mais informações, consulte Como planejar e configurar nós principais.

Remova arquivos desnecessários de /mnt

O espaço em disco mínimo disponível para /mnt é especificado pelo parâmetro dfs.namenode.resource.du.reserved. Quando a quantidade de disco disponível no diretório /mnt cair para um valor abaixo do valor definido em dfs.namenode.resource.du.reserved, o NameNode entrará no modo de segurança. O valor padrão para dfs.namenode.resource.du.reserved é de 100 MB. Quando o NameNode estiver no modo de segurança, não será permito realizar qualquer modificação de sistema de arquivos ou bloco. Assim, a remoção dos arquivos desnecessários de /mnt pode ajudar a solucionar o problema. Para excluir os arquivos que não são mais necessários, faça o seguinte:

1.    Conecte-se ao nó principal usando o SSH.

2.    Para verificar se o NameNode está no modo de segurança devido à falta de espaço em disco, confira os logs do NameNode. Esses logs estão localizados em /var/log/hadoop-hdfs. Se o espaço em disco for suficiente, os logs podem ser semelhantes aos seguintes:

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 o espaço em disco for insuficiente, os logs podem ser semelhantes aos seguintes:

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 se o NameNode ainda está no modo de segurança executando o seguinte comando:

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

4.    Exclua arquivos desnecessários de /mnt. Por exemplo, em um cluster com um nó principal, se o diretório em /mnt/namenode/current estiver usando uma grande quantidade de espaço, você poderá criar um novo snapshot (FSImage) e remover os logs de edição antigos.

O script de exemplo a seguir gera um novo snapshot, faz backup de logs de edição antigos em um bucket do Amazon Simple Storage Service (Amazon S3) e remove os logs de edição. O script não remove registros de edições que estão em execução. Execute o script a seguir como usuário do 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.    Verifique a quantidade de espaço em disco disponível em /mnt. Se o espaço disponível for superior a 100 MB, confira o status do modo de segurança novamente e, em seguida, desative-o:

[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 ainda tiver menos de 100 MB de espaço disponível, siga uma das alternativas a seguir:

  • Remova mais arquivos, conforme explicado na seção a seguir.
  • Aumente o tamanho do volume de /mnt.

Remova mais arquivos

1.    Conecte-se ao nó principal usando o SSH.

2.    Navegue até o diretório de /mnt:

cd /mnt

3.    Determine quais pastas estão usando mais espaço em disco:

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

4.    Continue investigando até encontrar o motivo do problema de espaço em disco. Por exemplo, se a pasta var estiver usando uma grande quantidade de espaço em disco, verifique as maiores subpastas em var:

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

5.    Depois de determinar qual arquivo/pasta está ocupando o espaço em disco, opte por excluí-lo(a). Certifique-se de excluir apenas os arquivos que não são mais necessários. Os arquivos de log compactados em /mnt/var/log/hadoop-hdfs/ e /mnt/var/log/hadoop-yarn/ que já foram copiados para o bucket de registro em log do Amazon S3 são bons candidatos a serem excluídos.

6.    Depois de excluir os arquivos desnecessários, confira o status do modo de segurança novamente e, em seguida, desative-o:

[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

Documentação do Hadoop para o Guia do usuário do HDFS

Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?