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

Última atualização: 23/12/2022

O serviço NameNode entra no modo de segurança quando tento executar um trabalho do Apache Hadoop ou do Apache Spark em um cluster do Amazon EMR. Tentei desativar o modo de segurança, mas ele retorna imediatamente. Quero tirar o NameNode do modo de segurança.

Breve descrição

Ao executar um trabalho do Apache Hadoop ou do Apache Spark em um cluster do Amazon EMR, você pode receber uma das seguintes mensagens de erro:

“Cannot create file/user/test.txt._COPYING_. Name node is in safe mode” (Não é possível criar file/user/test.txt._COPYING_. O nome do nó está no modo de segurança).

"org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /user/hadoop/.sparkStaging/application_15xxxxxxxx_0001. Name node is in safe mode. Ele foi ativado manualmente. Use "hdfs dfsadmin -safemode leave" to turn safe mode off. NamenodeHostName:ip-xxx-xx-xx-xx.ec2.internal” (org.apache.hadoop.hdfs.server.namenode.SafeModeExceptiativado: Não é possível excluir /user/hadoop/.sparkStaging/application_15xxxxxxxx_0001. O nome do nó está no modo de segurança. Use “hdfs dfsadmin -safemode leave” para desativar o modo de segurança).

O modo de segurança para o NameNode é um modo somente leitura para o cluster do Sistema de Arquivos Distribuído do Hadoop (HDFS). No modo de segurança, você não pode fazer nenhuma modificação no sistema de arquivos nem nos blocos. Depois que o DataNodes informa que a maioria dos blocos do sistema de arquivos está disponível, o NameNode sai automaticamente do modo de segurança. Entretanto, o NameNode pode entrar no modo de segurança pelos seguintes motivos:

  • O espaço disponível é menor do que o espaço necessário para o diretório de armazenamento do NameNode. O espaço necessário para o diretório do NameNode é definido 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.
  • Alguns nós do cluster podem estar inativos. Isso torna os blocos dos nós indisponíveis.
  • Alguns blocos podem estar corrompidos.

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

Resolução

Antes de sair do modo de segurança, confirme se você sabe e entende por que o NameNode está preso no modo de segurança. Revise o status de todos os logs do DataNodes e do NameNode.

Importante: em alguns casos, a desativação manual do modo de segurança pode levar à perda de dados.

Para desativar manualmente o modo de segurança, execute o seguinte comando:

sudo -u hdfs hadoop dfsadmin -safemode leave

Dependendo da causa raiz do erro, conclua uma ou mais das seguintes etapas de solução de problemas para desativar o modo de segurança.

Mudar para um cluster com vários nós primários

A definição de ponto de verificação não é automática em clusters com um nó primário único. Isso significa que 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. É uma prática recomendada remover manualmente os logs de edição de um cluster com um nó primário único. Se você não remover manualmente os logs de edição, eles poderão usar todo o espaço em disco em /mnt. Para solucionar esse problema, inicie um cluster com vários nós primários. Clusters com vários nós primários oferecem suporte à alta disponibilidade do HDFS NameNode. A alta disponibilidade do NameNode soluciona o problema de definição de ponto de verificação.

Para obter mais informações, consulte Plan and configure primary nodes (Planejar e configurar nós primários).

Remover 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 espaço em disco disponível para /mnt diminuir 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 é 100 MB. Quando o NameNode estiver no modo de segurança, nenhuma modificação será permitida no sistema de arquivos nem no bloco. Portanto, 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, execute as etapas a seguir:

1.    Conecte-se ao nó primário usando SSH.

2.    Verifique os logs do NameNode para constatar se o NameNode está no modo de segurança devido à falta de espaço em disco. Esses logs estão localizados em /var/log/hadoop-hdfs. Se o espaço em disco for suficiente, os logs poderão ser semelhantes ao seguinte log:

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 poderão ser semelhantes ao seguinte log:

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 comando a seguir:

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

4.    Exclua arquivos desnecessários de /mnt.

Se o diretório em/mnt/namenode/current estiver usando uma grande quantidade de espaço em um cluster com um nó primário, crie um novo snapshot (FsImage). Em seguida, remova os logs de edição antigos.

Por exemplo, você executa um script que efetua as seguintes ações:
Gera um novo snapshot.
Copia logs de edição antigos em um bucket do Amazon Simple Storage Service (Amazon S3).
Remove os logs de edição.

Exemplo 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

Observação: o script anterior não remove logs de edições em andamento.

5.    Verifique a quantidade de espaço em disco disponível em /mnt. Se o espaço disponível for maior que 100 MB, verifique novamente o status do modo de segurança. Em seguida, desative o modo de segurança:

[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, execute uma ou mais das ações a seguir:

Remova mais arquivos

1.    Conecte-se ao nó primário usando 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 a origem 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 pasta de arquivos está ocupando o espaço em disco, exclua estes arquivos. 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/ já foram copiados para o bucket de registro em log do Amazon S3. Esses arquivos de log são bons candidatos para exclusão.

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

[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

Verifique se há blocos/arquivos corrompidos ou ausentes

1.    Execute o comando a seguir para ver um relatório que ajuda você a verificar a integridade do cluster. O relatório também fornece uma porcentagem de blocos sub-replicados e uma contagem de réplicas ausentes.

hdfs fsck /

2.    Para cada arquivo da lista, execute o seguinte comando para localizar o DataNode para cada bloco do arquivo:

hdfs fsck example_file_name -locations -blocks -files

Observação: substitua example_file_name pelo nome do seu arquivo.

As mensagens que você vê são semelhantes às seguintes mensagens:

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!

Com base nas mensagens anteriores, você pode encontrar o DataNode que está armazenado no bloco. Por exemplo, “192.168.0.2”. Em seguida, você pode ver os logs desse DataNode para pesquisar erros relacionados ao ID do bloco (blk_xxx). Os nós muitas vezes são encerrados, resultando em blocos ausentes.

3.    Para excluir os arquivos corrompidos, saia do modo de segurança. Depois, execute o seguinte comando:

hdfs dfs -rm example_file_name

Observação: substitua example_file_name pelo nome do seu arquivo.

Usar métricas do CloudWatch para monitorar a integridade do HDFS

As seguintes métricas do Amazon CloudWatch podem ajudar a monitorar as possíveis causas pelas quais um NameNode entra no modo de segurança:

  • HDFSUtilization: a porcentagem do armazenamento HDFS que está sendo usado.
  • MissingBlocks: o número de blocos nos quais o HDFS não tem réplicas. Esses blocos podem estar corrompidos.
  • UnderReplicatedBlocks: o número de blocos que devem ser replicados uma ou mais vezes.

Guia do usuário do HDFS (do site do Apache Hadoop)

Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?