2012-12-05 9 views
12

Próbowałem skopiować pliki z dysku lokalnego na numer hdfs. Na początku dało to SafeModeException. Szukając rozwiązania, czytałem, że problem nie pojawia się, jeśli ktoś ponownie wykona to samo polecenie. Więc spróbowałem ponownie i nie dałem wyjątku.SafeModeException: węzeł nazwy jest w trybie awaryjnym

[email protected]:/usr/local/hadoop$ bin/hadoop dfs -copyFromLocal /tmp/gutenberg/ /user/hduser/gutenberg 
copyFromLocal: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/hduser/gutenberg. Name node is in safe mode. 
[email protected]:/usr/local/hadoop$ bin/hadoop dfs -copyFromLocal /tmp/gutenberg/ /user/hduser/gutenberg 

Dlaczego tak się dzieje? Czy powinienem wyłączać safemode przy użyciu tego kodu?

hadoop dfs -safemode leave 
+0

Jaka była różnica czasu między wykonywaniem poleceń? Po pierwszym uruchomieniu usług HDFS minie kilka chwil, zanim wszystkie węzły danych staną się online. –

+2

FYI, polecenie opuszczenia safemode w mojej wersji hadoop to: 'hadoop dfsadmin -safemode leave'. –

+0

@saket znalazłeś rozwiązanie swojego problemu? –

Odpowiedz

17

NameNode jest w trybie awaryjnym aż skonfigurowanego procent bloków zgłoszonych być online przez węzły danych. Można go skonfigurować za pomocą parametru dfs.namenode.safemode.threshold-pct wDla małych/deweloperskich klastrów, w których jest bardzo mało bloków - sensowne jest ustawienie tego parametru na niższy niż jego domyślna wartość 0.9999f. W przeciwnym razie 1 brakujący blok może spowodować zawieszenie się systemu w trybie awaryjnym.

+1

Podczas klastra w trybie awaryjnym można odczytać z HDFS, ale nie można pisać na HDFS. –

+0

Tak. Jest to tryb tylko do odczytu. –

12

Przejdź do ścieżki hadoop do bin (w moim systemie /usr/local/hadoop/bin/)

cd /usr/local/hadoop/bin/ 

Sprawdź znajduje się plik hadoop,

[email protected]:/usr/local/hadoop/bin$ ls 

O/P będzie,

hadoop   hadoop-daemons.sh start-all.sh  start-jobhistoryserver.sh stop-balancer.sh   stop-mapred.sh 
hadoop-config.sh rcc    start-balancer.sh start-mapred.sh   stop-dfs.sh    task-controller 
hadoop-daemon.sh slaves.sh   start-dfs.sh  stop-all.sh    stop-jobhistoryserver.sh 

Następnie musisz wyłączyć tryb awaryjny, używając komendy d ./hadoop dfsadmin -safemode leave,

[email protected]:/usr/local/hadoop/bin$ ./hadoop dfsadmin -safemode leave 

dostaniesz odpowiedź jako,

Safe mode is OFF 

Uwaga: Stworzyłem Hadoop użytkownika z nazwą hadoopuser.

+0

Odpowiedź jest niesamowita ,, dziękuję tonę @AJ –

Powiązane problemy