Hadoop HDFS - не удается подключиться к порту на главном - PullRequest
9 голосов
/ 02 января 2012

Я настроил небольшой кластер 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

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

Ответы [ 2 ]

9 голосов
/ 03 января 2012

Замените localhost в hdfs: // localhost: 9000 на ip-адрес или имя хоста для свойства fs.default.name в NameNode, когда к NameNode подключаются удаленные узлы.

Все процессына всех узлах были проверены на работоспособность с jps

. Возможно, в файлах журнала обнаружены некоторые ошибки.jps гарантирует, что процесс запущен.

0 голосов
/ 17 января 2015

Исправьте файл / etc / hosts, включив в него localhost, или исправьте файл core-site, указав ip или имя узла, на котором размещена HDFS файловая система.

...