Nazwa węzła jest w trybie awaryjnym. Nie mogę odejść


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

nie jest w stanie nic stworzyć w hdfs

Zrobiłem

root# bin/hadoop fs -safemode leave

Ale pokazuję

safemode: Unknown command

Jaki jest problem?

Rozwiązanie



2
W moim przypadku było to w bezpiecznym węźle, ponieważ zasoby były niskie (działa na
dockerze

@BrendenBrown, oto aktualnie działające łącze do Hadoop 3.2.0: hadoop.apache.org/docs/r3.2.0/hadoop-project-dist/hadoop-hdfs/…
Eugene Gr. Philippov

A oto aktualnie działające łącze do „stabilnej” Hadoopa (obecnie 2.9.x): hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/…
Eugene Gr. Philippov

Odpowiedzi:


211

Aby na siłę pozwolić namenode opuścić tryb bezpieczny, należy wykonać następujące polecenie:

 bin/hadoop dfsadmin -safemode leave

Otrzymujesz Unknown commandbłąd dla twojego polecenia, ponieważ -safemodenie jest to polecenie podrzędne dla hadoop fs, ale jest zhadoop dfsadmin .

Również po powyższym poleceniu sugerowałbym, abyś raz uruchomił hadoop fsck, aby wszelkie niespójności wkradły się w hdfs.

Aktualizacja:

Użyj hdfspolecenia zamiast hadooppolecenia dla nowszych dystrybucji. hadoopKomenda jest nieaktualne:

hdfs dfsadmin -safemode leave

hadoop dfsadminzostała przestarzała, podobnie jak hadoop fspolecenie, wszystkie zadania związane z hdfs są przenoszone do osobnej komendy hdfs.


2
właściwie dlaczego to wyświetla `` namenode is in
safeemode

1
Zasadniczo namenode wchodzi w tryb awaryjny w nietypowych sytuacjach, na przykład gdy dysk jest pełny, również w fazie uruchamiania. Przeczytaj więcej tutaj; hadoop.apache.org/docs/stable/hdfs_user_guide.html#Safemode
Amar

2
Używam Hadoop 2.0.0-cdh4.1.1 Kiedy uruchomiłem hadoop dfsadminpolecenie, dało mi to: ______ DEPRECATED: Use of this script to execute hdfs command is deprecated. Instead use the hdfs command for it. Safe mode is OFF ______ ... ale nadal działało. Wydaje się, że sugestia @ user3316017 poniżej to zalecana składnia.
CJBS,

Zaktualizowałem moją odpowiedź zgodnie z nowymi dystrybucjami, jeśli ktoś może nam pomóc w ustaleniu dokładnej wersji apache hadoop od czasu pojawienia się tych przestarzałych wersji, byłoby wspaniale.
Amar

1
W przypadku, gdy HDFS ponownie przechodzi do trybu awaryjnego, gdy tylko hdfs dfsadmin -safemode leavekomenda zostanie uruchomiona, ponieważ klaster jest pełny, czasami można wyjść z sytuacji, natychmiast łącząc w hdfs dfsadmin -safemode leave; hdfs dfs -rm -skipTrash /path/to/stuff/to/delete
łańcuch

27

spróbuj tego, to zadziała

sudo -u hdfs hdfs dfsadmin -safemode leave

to polecenie zadziałało dla mnie, ponieważ może wymagać przywilejów superużytkownika. dzięki @wesam
NikhilP


7

Jeśli używasz Hadoop w wersji 2.6.1 powyżej, gdy polecenie działa, narzeka, że ​​zostało zdeprecjonowane. Właściwie nie mogłem użyć, hadoop dfsadmin -safemode leaveponieważ korzystałem z Hadoopa w kontenerze Dockera, a to polecenie magicznie zawodzi po uruchomieniu w kontenerze, więc zrobiłem to. Sprawdziłem dokumentację i znalazłem dfs.safemode.threshold.pctw dokumentacji, która mówi

Określa procent bloków, które powinny spełniać minimalne wymagania replikacji zdefiniowane w dfs.replication.min. Wartości mniejsze lub równe 0 oznaczają, że nie należy czekać na określony procent bloków przed wyjściem z trybu bezpiecznego. Wartości większe niż 1 sprawią, że tryb bezpieczny będzie trwały.

więc zmieniłem hdfs-site.xmlna następujące (w starszych wersjach Hadoop najwyraźniej musisz to zrobić w hdfs-default.xml:

<configuration>
    <property>
        <name>dfs.safemode.threshold.pct</name>
        <value>0</value>
    </property>
</configuration>

5

Namenode wchodzi w tryb bezpieczny, gdy brakuje pamięci. W rezultacie HDFS staje się tylko do odczytu. Oznacza to, że nie można tworzyć żadnego dodatkowego katalogu ani pliku w HDFS. Aby wyjść z trybu bezpiecznego, używane jest następujące polecenie:

hadoop dfsadmin -safemode leave

Jeśli używasz menedżera Cloudera:

go to >>Actions>>Leave Safemode

Ale to nie zawsze rozwiązuje problem. Kompletne rozwiązanie polega na zrobieniu miejsca w pamięci. Użyj następującego polecenia, aby sprawdzić użycie pamięci.

free -m

Jeśli używasz Cloudera, możesz również sprawdzić, czy HDFS wykazuje oznaki złego stanu zdrowia. Prawdopodobnie musi pokazywać jakiś problem z pamięcią związany z kodem nazw. Przydziel więcej pamięci, korzystając z dostępnych opcji. Nie jestem pewien, jakich poleceń użyć do tego samego, jeśli nie używasz menedżera Cloudera, ale musi być sposób. Mam nadzieję, że to pomoże! :)


5

Spróbuj tego

sudo -u hdfs hdfs dfsadmin -safemode leave

sprawdź stan trybu bezpiecznego

sudo -u hdfs hdfs dfsadmin -safemode get

Jeśli nadal jest w trybie bezpiecznym, jednym z powodów byłoby za mało miejsca w twoim węźle, możesz sprawdzić użycie dysku węzła za pomocą:

df -h

jeśli partycja główna jest pełna, usuń pliki lub dodaj miejsce na partycji głównej i ponów pierwszy krok.


4

tryb bezpieczny włączony oznacza (HDFS jest tylko do
odczytu) tryb bezpieczny wyłączony oznacza (HDFS jest w trybie z możliwością zapisu i odczytu)

W programie Hadoop 2.6.0możemy sprawdzić stan nazwy węzła za pomocą poniższych poleceń:

SPRAWDZIĆ stan węzła nazwy

$ hdfs dfsadmin -safemode get

ABY WEJŚĆ W BEZPIECZNY TRYB:

$ hdfs dfsadmin -safemode enter

Aby opuścić tryb bezpieczny

~$ hdfs dfsadmin -safemode leave

1
TO FORCE LEAVE SAFE MODE: ~ $ hdfs dfsadmin -safemode forceExit
ammills01

1

Uruchom poniższe polecenie, używając użytkownika systemu operacyjnego HDFS, aby wyłączyć tryb awaryjny:

sudo -u hdfs hadoop dfsadmin -safemode leave

0

użyj poniższego polecenia, aby wyłączyć tryb bezpieczny

$> hdfs dfsadmin -safemode zostaw

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.