Hadoop HDFS - Impossible de se connecter au port sur le maître
J'ai mis en place un petit cluster Hadoop pour les tests. Le programme d'installation est allé assez bien avec le NameNode (1 machine), SecondaryNameNode (1) et tous les DataNodes (3). Les machines sont appelées "maître", "secondaire" et "data01", "data02" et "data03". Tous les DNS sont correctement mis en place, et SSH sans mot de passe a été configuré de maître/secondaire pour toutes les machines et à l'arrière.
J'ai formaté le cluster avec bin/hadoop namenode -format
, puis a commencé à tous les services de l'aide bin/start-all.sh
. Tous les processus sur tous les nœuds ont été vérifié pour être opérationnel avec jps
. Ma configuration de base des fichiers de ressembler à quelque chose comme ceci:
<!-- 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
Je suis juste essayer d'obtenir HDFS fonctionne correctement maintenant.
J'ai créé un dir pour les tests hadoop fs -mkdir testing
, puis essayé de copier certains fichiers avec hadoop fs -copyFromLocal /tmp/*.txt testing
. C'est quand hadoop se bloque, ce qui me donne plus ou moins ceci:
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 ...
Et ainsi de suite. Un problème similaire se produit lorsque j'essaie d'exécuter hadoop fs -lsr .
à partir d'un DataNode de la machine, seulement pour obtenir le suivant:
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).
...
Je dis que c'est similaire, parce que j'ai l'impression que c'est un port de problèmes de disponibilité. L'exécution de telnet master 9000
révèle que le port est fermé. J'ai lu quelque part que cela pourrait être une IPv6 clash problème, et définit donc le suivant conf/hadoop-env.sh:
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
Mais qui n'a pas fait l'affaire. L'exécution de netstat
sur le maître révèle quelque chose comme ceci:
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
À ce point, je suis sûr que le problème est avec le port (9000), mais je ne suis pas sûr de ce que j'ai manqué autant que la configuration va. Des idées? Merci.
mise à jour
J'ai trouvé que le codage en dur des noms DNS dans /etc/hosts
non seulement aider à résoudre ce problème, mais accélère également les connexions. L'inconvénient est que vous devez le faire sur toutes les machines du cluster, et à nouveau lorsque vous ajoutez de nouveaux nœuds. Ou vous pouvez simplement mettre en place un serveur DNS, je n'ai pas.
Voici un échantillon de mon un nœud dans mon cluster (nœuds sont nommés hadoop01
, hadoop02
, etc, avec le maître et secondaire étant 01 et 02). Nœud que la plupart de celui-ci sont générés par le système d'exploitation:
# 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
Espère que cette aide.
OriginalL'auteur sa125 | 2012-01-02
Vous devez vous connecter pour publier un commentaire.
Remplacer localhost dans hdfs://localhost:9000 avec l'adresse ip ou le nom d'hôte pour le fs.par défaut.nom de la propriété dans le NameNode quand il y a des nœuds distants de la connexion à la NameNode.
Il pourrait y avoir quelques erreurs dans les fichiers journaux. jps permet de s'assurer que le processus est en cours d'exécution.
pourriez-vous poster un exemple de /etc/hosts pour illustrer vos modifications? Je suis coincé avec le même problème.
bien sûr, voir la mise à jour de réponse.
Merci, je l'ai eu à exécuter juste avant de quitter le travail 🙂 Juste une question: pourquoi avez-vous
hadoop01
comme un alias pour le full IP et localhost? Existe-il des avantages de cette configuration?Drôle, j'ai ajouté le maître comme un synonyme pour localhost + IP, au lieu de la définition de la propriété intellectuelle dans le core-site.xml et l'exemple de applicationruns plus vite maintenant. 1:24 au lieu de 15 minutes. (2 VM, entièrement en mode distribué, l'exemple est
hadoop jar /usr/share/hadoop/hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
) Merci beaucoup!OriginalL'auteur Praveen Sripati
Correcte de votre fichier /etc/hosts pour inclure localhost ou de corriger votre de base-site fichier pour spécifier l'ip ou le nom de nœud qui héberge HDFS système de fichiers.
127.0.1.1 ubuntu01
(ubuntu01 est sur de mon cluster datanode). donc, si vous utilisez ce paramètre pour démarrer namenode, il ne peut pas écouter les autres ip à partir d'un autre datanode.OriginalL'auteur Baban Gaigole