O nó do nome está em modo seguro. Incapaz de sair
root# bin/hadoop fs -mkdir t
mkdir: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/root/t. Name node is in safe mode.
não é capaz de criar nada em hdfs
eu fiz
root# bin/hadoop fs -safemode leave
mas mostrando
safemode: Unknown command
Qual é o problema?
Solução
9 answers
De modo a permitir à força que o namenode saia do safemode, deverá ser executado o seguinte comando:
bin/hadoop dfsadmin -safemode leave
Você está recebendo Unknown command
erro para o seu comando pois -safemode
não é um Sub-comando para hadoop fs
, mas é de hadoop dfsadmin
.
Também depois do comando acima, sugiro que execute uma vez hadoop fsck
para que quaisquer inconsistências presentes no hdfs possam ser resolvidas.
Actualizar:
Usar o comando hdfs
em vez do comando hadoop
para as distribuições mais recentes. O hadoop
o comando está a ser desacreditado:
hdfs dfsadmin -safemode leave
hadoop dfsadmin
foi desactualizado e assim é hadoop fs
, todas as tarefas relacionadas com hdfs estão a ser movidas para um comando separado hdfs
.
sudo -u hdfs hdfs dfsadmin -safemode leave
O comando não funcionou para mim, mas o seguinte funcionou
hdfs dfsadmin -safemode leave
Usei o comando hdfs
em vez do comando hadoop
.
Se usar a versão 2.6.1 do Hadoop, enquanto o comando funciona, queixa-se de que a sua desvalorização. Eu realmente não podia usar o {[[1]} porque eu estava executando Hadoop em um container Docker e esse comando magicamente falha quando executado no container, então o que eu fiz foi isso. Eu verifiquei o doc e encontrei dfs.safemode.threshold.pct
em documentação que diz
Especifica a percentagem de blocos que devem satisfazer o mínimo requisito de replicação definido por dfs.replicacao.minuto. Valores inferiores igual ou superior a 0 Média para não esperar por uma determinada percentagem de bloqueia antes de sair de safemode. Valores superiores a 1 tornar-se-ão seguros modo permanente.
Então eu mudei o hdfs-site.xml
para o seguinte (nas versões mais antigas do Hadoop, aparentemente você precisa fazer isso em hdfs-default.xml
:
<configuration>
<property>
<name>dfs.safemode.threshold.pct</name>
<value>0</value>
</property>
</configuration>
O Namenode entra no safemode quando há falta de memória. Como resultado, o HDFS torna-se legível apenas. Isso significa que não se pode criar qualquer diretório ou arquivo adicional no HDFS. Para sair do safemode, é utilizado o seguinte comando:
hadoop dfsadmin -safemode leave
Se estiver a utilizar o cloudera manager:
go to >>Actions>>Leave Safemode
Mas nem sempre resolve o problema. A solução completa está em fazer algum espaço na memória. Use o seguinte comando para verificar a sua memória uso.
free -m
Se estiver a utilizar cloudera, também pode verificar se os HDFS mostram alguns sinais de má saúde. Deve estar a mostrar algum problema de memória relacionado com o namenode. Allot mais memória, seguindo as opções disponíveis. Não tenho certeza que comandos usar para o mesmo se você não está usando o Gerenciador cloudera, mas deve haver uma maneira. Espero que ajude! :)
Tenta isto.
sudo -u hdfs hdfs dfsadmin -safemode leave
Verificar o estado de safemode
sudo -u hdfs hdfs dfsadmin -safemode get
Se ainda estiver em safemode, então uma das razões seria não haver espaço suficiente no seu nó, você pode verificar a utilização do seu nó em disco usando:
df -h
Se a partição do 'root' estiver cheia, remova os ficheiros ou adicione espaço na sua partição de 'root' e repita o primeiro passo.
Execute o comando abaixo usando o utilizador de SO HDFS para desactivar o modo seguro:
sudo -u hdfs hadoop dfsadmin -safemode leave
Usar abaixo do comando para desligar o modo seguro
$> hdfs dfsadmin-safemode leave
Modo Seguro ligado meios (HDFS está apenas em Modo de leitura)
modo de desactivação seguro (HDFS em Modo de gravação e leitura)
Em Hadoop 2.6.0
, podemos verificar o estado do nó do nome com a ajuda dos comandos abaixo:
Para verificar o estado do nó de nome
$ hdfs dfsadmin -safemode get
PARA ENTRAR EM MODO SEGURO:
$ hdfs dfsadmin -safemode enter
Deixar o modo seguro
~$ hdfs dfsadmin -safemode leave