Hadoop HDFS - Cannot connect to port on master

Я создал небольшой кластер Hadoop для тестирования. Настройка прошла довольно хорошо с NameNode (1 машина), SecondaryNameNode (1) и всеми DataNodes (3). Машины имеют имена "master", "secondary" и "data01", "data02" и "data03". Все DNS настроены правильно, и SSH без пароля был настроен от master/secondary ко всем машинам и обратно.

Я отформатировал кластер с помощью 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), но я не уверен, что я упустил в конфигурации. Есть идеи? Спасибо.

update

Я обнаружил, что жесткое кодирование имен 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

Надеюсь, это поможет.

9
задан Chris Snow 18 June 2014 в 12:32
поделиться