SafeModeException: Имя node находится в безопасном режиме
Я попытался скопировать файлы с локального диска на hdfs
. Сначала он дал SafeModeException
. При поиске решения я прочитал, что проблема не возникает, если повторять одну и ту же команду еще раз. Поэтому я попробовал еще раз, и это не дало исключений.
[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
Почему это происходит? Должен ли я сохранить safemode с помощью этого кода?
hadoop dfs -safemode leave
Ответы
Ответ 1
NameNode находится в safemode, пока не будет настроен процент блоков, которые, как сообщается, находятся в режиме онлайн узлами данных. Его можно настроить параметром dfs.namenode.safemode.threshold-pct
в hdfs-site.xml
Для небольших/кластеров разработки, где у вас очень мало блоков, имеет смысл сделать этот параметр ниже, чем значение по умолчанию 0.9999f
. В противном случае 1 отсутствующий блок может привести к зависанию системы в safemode.
Ответ 2
Перейдите к пути hadoop
в bin
(в моей системе /usr/local/hadoop/bin/
),
cd /usr/local/hadoop/bin/
Проверьте, есть ли файл hadoop
,
[email protected]:/usr/local/hadoop/bin$ ls
o/p будет,
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
Затем вам нужно выйти из безопасного режима, используя команду ./hadoop dfsadmin -safemode leave
,
[email protected]:/usr/local/hadoop/bin$ ./hadoop dfsadmin -safemode leave
вы получите ответ как,
Safe mode is OFF
Примечание. Я создал пользователя Hadoop с именем hadoopuser
.