web-dev-qa-db-fra.com

hadoop - Connexion refusée sur namenode

J'ai cherché web et stackoverflow pendant longtemps mais ce n'était pas utile.

J'ai installé le fil hadoop 2.2.0 dans une configuration de cluster à 2 nœuds. mais quelque chose ne va pas. Lorsque je lance des démons hadoop en utilisant start-dfs.sh et start-yarn.sh sur le noeud principal, ils s'exécutent avec succès en maître et en esclave (le nom d'hôte de mon maître est RM et celui de mon esclave est slv). ). ils peuvent s'échanger avec succès. mais quand je veux exécuter un travail, cette erreur apparaît:

14/01/02 04:22:53 WARN util.NativeCodeLoader: Impossible de charger la bibliothèque native-hadoop pour votre plate-forme ... à l'aide de classes Java intégrées, le cas échéant 14/01/02 04:22:56 WARN hdfs.DFSClient: exception DataStreamer Org.Apache.hadoop.ipc.RemoteException (Java.io.IOException): le fichier/utilisateur/root/QuasiMonteCarlo_1388665371850_813553673/in/part0 n'a pu être répliqué que sur 0 nœuds au lieu de minReic (= 1). 0 datanode (s) est en cours d'exécution et aucun nœud n'est exclu de cette opération. À org.Apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget (BlockManager.Java:1384) à org.Apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock (FSNamesystem.Java:2477) à org.Apache.hadoop.hdfs.server.namenode.Namenode.Nomode.Nomode.Nomode.NomodeRpcServer.addBlock (NodeNadd) Java: 555). ClientNamenodeProtocol $ 2.callBlockingMethod (ClientNamenodeProtocolProtos.Java:59582) À l'adresse org.Apache.hadoop.ipc.ProtobufRpcEngine $ Server $ ProtoBufRpcInvoker.call (ProtobufRpcEngine.Production). .ipc.RPC $ Server.call (RPC.Java:928) à org.Apache.hadoop.ipc.Server $ Handler $ 1.run (Server.Java:2048) à org.Apache.hadoop.ipc.Server $ Handler $ 1.run (Server.Java:2044) à Java.security.AccessController.doPrivileged (Méthode native) à javax. security.auth.Subject.doAs (Subject.Java:416) à org.Apache.hadoop.security.UserGroupInformation.doAs (UserGroupInformation.Java:1491) à org.Apache.hadoop. ipc.Server $ Handler.run (Server.Java:2042)

at org.Apache.hadoop.ipc.Client.call(Client.Java:1347)
at org.Apache.hadoop.ipc.Client.call(Client.Java:1300)
at org.Apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.Java:206)
at com.Sun.proxy.$Proxy9.addBlock(Unknown Source)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:622)
at org.Apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.Java:186)
at org.Apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.Java:102)
at com.Sun.proxy.$Proxy9.addBlock(Unknown Source)
at org.Apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.addBlock(ClientNamenodeProtocolTranslatorPB.Java:330)
at org.Apache.hadoop.hdfs.DFSOutputStream$DataStreamer.locateFollowingBlock(DFSOutputStream.Java:1226)
at org.Apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.Java:1078)
at org.Apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.Java:514)

et dans le journal datanode, ce journal existe:

2014-01-02 04: 40: 31,616 WARN org.Apache.hadoop.hdfs.server.datanode.DataNode: Problème de connexion au serveur: RM/192.168.1.101: 9000 2014-01-02 04:40 : 37 618 INFO org.Apache.hadoop.ipc.Client: Nouvelle tentative de connexion au serveur: RM/192.168.1.101: 9000. Déjà essayé 0 fois $ 2014-01-02 04: 40: 38,619 INFO org.Apache.hadoop.ipc.Client: Nouvelle tentative de connexion au serveur: RM/192.168.1.101: 9000. Déjà essayé 1 fois (s) $ 2014-01-02 04: 40: 39,620 INFO org.Apache.hadoop.ipc.Client: Nouvelle tentative de connexion au serveur: RM/192.168.1.101: 9000. Déjà essayé 2 fois (s) $ 2014-01-02 04: 40: 40,621 INFO org.Apache.hadoop.ipc.Client: Nouvelle tentative de connexion au serveur: RM/192.168.1.101: 9000. Déjà essayé 3 fois

J'ai vérifié le port 9000 sur le nœud maître et le résultat est le suivant:

tcp 0 0 127.0.0.1:9000 0.0.0.0:* ÉCOUTER 10227/Java 

Je suppose que le problème est dû à la raison pour laquelle, dans le nœud esclave, lorsque je 

telnet RM 9000

ça dit 

Essai 192.168.1.101 ... Telnet: impossible de se connecter à l'hôte distant: connexion refusée

toutefois 

telnet RM

la sortie est:

Essayez 192.168.1.101 ... Connecté à RM. Le caractère d'échappement est '^]'. Ubuntu 12.04.2 LTS RM login:

pour plus d’informations, mon/etc/hosts sur le maître et l’esclave est comme ci-dessous:

127.0.0.1 RM | slv localhost 

192.168.1.101 RM

192.168.1.103 slv

quelqu'un peut-il me proposer une solution? toute aide est vraiment appréciée. merci

9
masoumeh

Je pense que le problème est que votre maître est à l'écoute sur 127.0.0.1:9000, donc datanode ne peut pas se connecter car il n'écoute pas à 192.168.1.101:9000 (en théorie, un bon endroit pour écouter est 0.0.0.0:9000 car il évite ce problème, mais il semble que cette configuration ne soit pas acceptée).

Peut-être que ça résoudra la modification de votre /etc/hosts en supprimant la première ligne, ou tout d'abord, essayez simplement avec:

127.0.0.1 localhost
192.168.1.101 RM
192.168.1.103 slv

- edit: lire les commentaires ci-dessous

12
Alfonso Nishikawa

J'ai eu le même problème, j'ai changé

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:8020</value>
</property>

dans core-site.xml à 

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://ip-address:8020</value>
</property>

et cela a fonctionné

1
gary69

J'ai rencontré le même problème. Après avoir exécuté jps, nous pouvons voir que tous les noms et les codes de données sont en cours d'exécution. mais ne peut pas voir le nœud actif dans la page Web. Et j'ai trouvé que je mettais 127.0.0.1 master dans /etc/hosts. Après l'avoir enlevé. les esclaves peuvent telnet master 9000.

Mon /etc/hosts ressemble à:

127.0.0.1   localhost

192.168.139.129 slave1

192.168.139.130 slave2

192.168.139.128 master
0
Levin