Работает 0 datanode (s), и в этой операции исключаются node (s)

Я создал многоузловой кластер Hadoop. NameNode и Secondary namenode работают на одном компьютере, и в кластере есть только один Datanode. Все узлы настроены на машинах Amazon EC2.

Ниже приведены файлы конфигурации на главном узле:

masters
54.68.218.192 (public IP of the master node)

slaves
54.68.169.62 (public IP of the slave node)

ядро-site.xml

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

mapred-site.xml

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

HDFS-site.xml

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/datanode</value>
</property>
</configuration>

Теперь файлы конфигурации на датоде:

ядро-site.xml

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://54.68.218.192:10001</value>
</property>
</configuration>

mapred-site.xml

<configuration>
<property>
<name>mapred.job.tracker</name>
<value>54.68.218.192:10002</value>
</property>
</configuration>

HDFS-site.xml

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/datanode</value>
</property>
</configuration>

запуск jps на Наменоде дает следующее:

5696 NameNode
6504 Jps
5905 SecondaryNameNode
6040 ResourceManager

и JPS на датоде:

2883 DataNode
3496 Jps
3381 NodeManager

что мне кажется правильным.

Теперь, когда я пытаюсь запустить команду put:

hadoop fs -put count_inputfile /test/input/

Это дает мне следующую ошибку:

put: File /count_inputfile._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1).  There are 0 datanode(s) running and no node(s) are excluded in this operation.

Журналы на датоде говорят следующее:

hadoop-datanode log
INFO org.apache.hadoop.ipc.Client: Retrying connect to server:      54.68.218.192/54.68.218.192:10001. Already tried 8 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)

журнал управления пряжей:

INFO org.apache.hadoop.ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8031. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)

Веб-интерфейс диспетчера узлов (50070) показывает, что существует 0 активных узлов и 0 мертвых узлов, а значение dfs составляет 100%.

Я также отключил IPV6.

На нескольких веб-сайтах я узнал, что мне следует также отредактировать файл /etc/hosts. Я также отредактировал их, и они выглядят так:

127.0.0.1 localhost
172.31.25.151 ip-172-31-25-151.us-west-2.compute.internal
172.31.25.152 ip-172-31-25-152.us-west-2.compute.internal

Почему я все еще получаю ошибку?

Ответ 1

Две вещи работали для меня,

ШАГ 1: остановить hadoop и очистить файлы temp от hduser

sudo rm -R /tmp/*

также вам может понадобиться удалить и воссоздать /app/hadoop/tmp (в основном, когда я изменяю версию hadoop от 2.2.0 до 2.7.0)

sudo rm -r /app/hadoop/tmp
sudo mkdir -p /app/hadoop/tmp
sudo chown hduser:hadoop /app/hadoop/tmp
sudo chmod 750 /app/hadoop/tmp

ШАГ 2: форматирование namenode

hdfs namenode -format

Теперь я вижу DataNode

[email protected]:~$ jps
19135 NameNode
20497 Jps
19477 DataNode
20447 NodeManager
19902 SecondaryNameNode
20106 ResourceManager

Ответ 2

У меня была такая же проблема после неправильного завершения работы node. Также проверяется в пользовательском интерфейсе, в котором нет данных.

Теперь он работает после удаления файлов из папки datanode и перезапуска служб.

stop-all.sh

rm -rf/usr/local/hadoop_store/hdfs/datanode/*

start-all.sh

Ответ 3

@Learner,
У меня была эта проблема с datanodes, которая не показана в пользовательском интерфейсе Namenode. Решила его этими шагами в Hadoop 2.4.1.

сделать это для всех узлов (master и slaves)

1. удалить все временные файлы (по умолчанию в /tmp ) - sudo rm -R /tmp/*.
2. Теперь попробуйте подключиться ко всем узлам через ssh, используя ssh [email protected], и добавьте ключи в свой мастер с помощью ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected], чтобы предоставить неограниченный доступ подчиненных устройств к главному устройству (при этом не может быть проблемой для отказа в подключении).
3. Отформатируйте namenode с помощью hadoop namenode -format и попробуйте перезапустить демоны.

Ответ 4

В моей ситуации работал firewalld. Это было по умолчанию. И это не позволяет общаться между узлами. Мой кластер hadoop был тестовым кластером. Из-за этого я остановил службу. Если ваши серверы находятся в процессе производства, вы должны разрешить использование портов suoop на firewalld вместо

service firewalld stop
chkconfig firewalld off

Ответ 5

У меня была такая же ошибка. У меня не было разрешения на файловую систему hdfs. Поэтому я даю разрешение моему пользователю:

chmod 777 /usr/local/hadoop_store/hdfs/namenode
chmod 777 /usr/local/hadoop_store/hdfs/datanode

Ответ 6

В моей ситуации мне не хватало необходимых свойств внутри hdfs-site.xml (Hadoop 3.0.0), установленного с помощью HomeBrew на MacOS. (file:/// не является опечаткой.)

<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///usr/local/Cellar/hadoop/hdfs/namenode</value>
</property>

<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///usr/local/Cellar/hadoop/hdfs/datanode</value>
</property>

Ответ 7

Вероятно, это связано с тем, что идентификатор кластера данных datanodes и namenodes или диспетчер node не совпадают. Идентификатор кластера можно увидеть в файле VERSION, найденном как в namenode, так и в datanodes.

Это происходит, когда вы форматируете свой namenode и затем перезапускаете кластер, но datanodes все еще пытаются подключиться с использованием предыдущего идентификатора clusterID. для успешного подключения вам нужен правильный IP-адрес, а также соответствующий идентификатор кластера на узлах.

Итак, попробуйте переформатировать namenode и datanodes или просто настройте datanodes и namenode на вновь созданных папках.

Это должно решить вашу проблему.

Удаление файлов из текущей папки datanodes также удалит старый файл VERSION и запросит новый файл VERSION при повторном подключении к namenode.

Пример: каталог datanode в конфигурации есть /hadoop 2/datanode

$ rm -rvf /hadoop2/datanode/*

И затем перезапустите службы Если вы переформатируете свой namenode, сделайте это до этого шага. Каждый раз, когда вы переформатируете свой namenode, он получает новый идентификатор, и этот идентификатор генерируется случайным образом и не будет соответствовать старому идентификатору в ваших datanodes.

Итак, каждый раз следуйте этой последовательности

если вы форматируете namenode   затем Удалить содержимое каталога данных datanode ИЛИ настроить datanode на вновь созданный каталог   Затем запустите свой namenode и datanodes

Ответ 8

Значение свойства {fs.default.name} в файле core-site.xml, как на главном, так и на ведомом компьютере, должно указывать на мастер-машину. Итак, это будет примерно так:

<property>
     <name>fs.default.name</name>
     <value>hdfs://master:9000</value>
</property>

где master - это имя хоста в файле /etc/hosts, указывающее на мастер node.

Ответ 9

Вы пробовали очистить папку /tmp.

До очистки датанода не подходила

86528 SecondaryNameNode
87719 Jps
86198 NameNode
78968 RunJar
79515 RunJar
63964 RunNiFi
63981 NiFi

После очистки

sudo rm -rf /tmp/*

У меня сработало

89200 Jps
88859 DataNode

Ответ 10

Решение @mustafacanturk, отключение брандмауэра работало для меня. Я думал, что датододы запускаются, потому что они появляются при запуске jps, но при попытке загрузить файлы я получаю сообщение "0 узлов работает". На самом деле ни один из веб-интерфейсов (http://nn1: 50070) не работал из-за брандмауэра. Я отключил брандмауэр при установке hadoop, но по какой-то причине это произошло. Тем не менее, иногда чистка или воссоздание временных папок (hadoop.tmp.dir) или даже папок dfs.data.dir и dfs.namenode.name.dir и переформатирование сервера имен были решением.

Ответ 11

1) Сначала остановите все службы, используя команду stop-all.sh

2) Удалите все файлы внутри datanode rm -rf/usr/local/hadoop_store/hdfs/datanode/*

3) Затем запустите все службы, используя команду start-all.sh

Вы можете проверить, работают ли все ваши службы с помощью команды jps

Надеюсь, что это сработает!!!