Я настроил небольшой кластер Hadoop для тестирования. Установка прошла довольно хорошо с NameNode (1 компьютер), SecondaryNameNode (1) и всеми DataNodes (3). Машины называются «мастер», «вторичный» и «data01», «data02» и «data03». Все DNS настроены правильно, а SSH без пароля был настроен с главного / дополнительного на все машины и обратно.
Я отформатировал кластер с bin/hadoop namenode -format
, а затем запустил все службы, используя bin/start-all.sh
. Все процессы на всех узлах были проверены на работоспособность с jps
. Мои основные конфигурационные файлы выглядят примерно так:
<!-- conf/core-site.xml -->
<configuration>
<property>
<name>fs.default.name</name>
<!--
on the master it's localhost
on the others it's the master's DNS
(ping works from everywhere)
-->
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<!-- I picked /hdfs for the root FS -->
<value>/hdfs/tmp</value>
</property>
</configuration>
<!-- conf/hdfs-site.xml -->
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/hdfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
# conf/masters
secondary
# conf/slaves
data01
data02
data03
Сейчас я просто пытаюсь правильно запустить HDFS.
Я создал каталог для тестирования hadoop fs -mkdir testing
, затем попытался скопировать в него некоторые файлы с помощью hadoop fs -copyFromLocal /tmp/*.txt testing
. Это когда происходит сбой hadoop, давая мне более или менее это:
WARN hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/hd/testing/wordcount1.txt could only be replicated to 0 nodes, instead of 1
at ... (such and such)
WARN hdfs.DFSClient: Error Recovery for block null bad datanode[0] nodes == null
at ...
WARN hdfs.DFSClient: Could not get block locations. Source file "/user/hd/testing/wordcount1.txt" - Aborting...
at ...
ERROR hdfs.DFSClient: Exception closing file /user/hd/testing/wordcount1.txt: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/hd/testing/wordcount1.txt could only be replicated to 0 nodes, instead of 1
at ...
И так далее. Аналогичная проблема возникает, когда я пытаюсь запустить hadoop fs -lsr .
с компьютера с узлом DataNode только для получения следующего:
12/01/02 10:02:11 INFO ipc.Client: Retrying connt to server master/192.162.10.10:9000. Already tried 0 time(s).
12/01/02 10:02:12 INFO ipc.Client: Retrying connt to server master/192.162.10.10:9000. Already tried 1 time(s).
12/01/02 10:02:13 INFO ipc.Client: Retrying connt to server master/192.162.10.10:9000. Already tried 2 time(s).
...
Я говорю, что это похоже, потому что я подозреваю, что это проблема доступности порта. Запуск telnet master 9000
показывает, что порт закрыт. Я где-то читал, что это может быть проблема с конфликтом IPv6, и поэтому определил следующее в conf / hadoop-env.sh:
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
Но это не помогло. Запуск netstat
на мастере показывает что-то вроде этого:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:9000 localhost:56387 ESTABLISHED
tcp 0 0 localhost:56386 localhost:9000 TIME_WAIT
tcp 0 0 localhost:56387 localhost:9000 ESTABLISHED
tcp 0 0 localhost:56384 localhost:9000 TIME_WAIT
tcp 0 0 localhost:56385 localhost:9000 TIME_WAIT
tcp 0 0 localhost:56383 localhost:9000 TIME_WAIT
На данный момент я почти уверен, что проблема с портом (9000), но я не уверен, что я пропустил, что касается конфигурации. Есть идеи? Спасибо.
обновление
Я обнаружил, что жесткое кодирование DNS-имен в /etc/hosts
не только помогает решить эту проблему, но и ускоряет соединения. Недостатком является то, что вы должны делать это на всех машинах в кластере, и снова при добавлении новых узлов. Или вы можете просто настроить DNS-сервер, чего я не сделал.
Вот пример моего единственного узла в моем кластере (узлы с именами hadoop01
, hadoop02
и т. Д., С главным и вторичным значениями 01 и 02). Узел, который в основном генерируется ОС:
# this is a sample for a machine with dns hadoop01
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastrprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allroutes
# --- Start list of nodes
192.168.10.101 hadoop01
192.168.10.102 hadoop02
192.168.10.103 hadoop03
192.168.10.104 hadoop04
192.168.10.105 hadoop05
192.168.10.106 hadoop06
192.168.10.107 hadoop07
192.168.10.108 hadoop08
192.168.10.109 hadoop09
192.168.10.110 hadoop10
# ... and so on
# --- End list of nodes
# Auto-generated hostname. Please do not remove this comment.
127.0.0.1 hadoop01 localhost localhost.localdomain
Надеюсь, это поможет.