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
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
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é
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