La Réplication de données erreur dans Hadoop
Je suis la mise en œuvre de l'Hadoop Seul Nœud de Cluster sur ma machine en suivant Michael Noll du tutoriel et viennent à travers la réplication de données d'erreur:
Voici le message d'erreur complet:
> hadoop@laptop:~/hadoop$ bin/hadoop dfs -copyFromLocal > tmp/testfiles testfiles > > 12/05/04 16:18:41 WARN hdfs.DFSClient: DataStreamer Exception: > org.apache.hadoop.ipc.RemoteException: java.io.IOException: File > /user/hadoop/testfiles/testfiles/file1.txt could only be replicated to > 0 nodes, instead of 1 at > org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1271) > at > org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:422) > at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source) at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) at > org.apache.hadoop.ipc.RPC$Server.call(RPC.java:508) at > org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:959) at > org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:955) at > java.security.AccessController.doPrivileged(Native Method) at > javax.security.auth.Subject.doAs(Subject.java:396) at > org.apache.hadoop.ipc.Server$Handler.run(Server.java:953) > > at org.apache.hadoop.ipc.Client.call(Client.java:740) at > org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:220) at > $Proxy0.addBlock(Unknown Source) at > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) at > org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82) > at > org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59) > at $Proxy0.addBlock(Unknown Source) at > org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFSClient.java:2937) > at > org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:2819) > at > org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.java:2102) > at > org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2288) > > 12/05/04 16:18:41 WARN hdfs.DFSClient: Error Recovery for block null > bad datanode[0] nodes == null 12/05/04 16:18:41 WARN hdfs.DFSClient: > Could not get block locations. Source file > "/user/hadoop/testfiles/testfiles/file1.txt" - Aborting... > copyFromLocal: java.io.IOException: File > /user/hadoop/testfiles/testfiles/file1.txt could only be replicated to > 0 nodes, instead of 1 12/05/04 16:18:41 ERROR hdfs.DFSClient: > Exception closing file /user/hadoop/testfiles/testfiles/file1.txt : > org.apache.hadoop.ipc.RemoteException: java.io.IOException: File > /user/hadoop/testfiles/testfiles/file1.txt could only be replicated to > 0 nodes, instead of 1 at > org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1271) > at > org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:422) > at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source) at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) at > org.apache.hadoop.ipc.RPC$Server.call(RPC.java:508) at > org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:959) at > org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:955) at > java.security.AccessController.doPrivileged(Native Method) at > javax.security.auth.Subject.doAs(Subject.java:396) at > org.apache.hadoop.ipc.Server$Handler.run(Server.java:953) > > org.apache.hadoop.ipc.RemoteException: java.io.IOException: File > /user/hadoop/testfiles/testfiles/file1.txt could only be replicated to > 0 nodes, instead of 1 at > org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1271) > at > org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:422) > at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source) at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) at > org.apache.hadoop.ipc.RPC$Server.call(RPC.java:508) at > org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:959) at > org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:955) at > java.security.AccessController.doPrivileged(Native Method) at > javax.security.auth.Subject.doAs(Subject.java:396) at > org.apache.hadoop.ipc.Server$Handler.run(Server.java:953) > > at org.apache.hadoop.ipc.Client.call(Client.java:740) at > org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:220) at > $Proxy0.addBlock(Unknown Source) at > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) at > org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82) > at > org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59) > at $Proxy0.addBlock(Unknown Source) at > org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFSClient.java:2937) > at > org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:2819) > at > org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.java:2102) > at > org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2288)
Aussi, quand j'execute:
bin/stop-all.sh
Il est dit que datanode n'a pas été démarré et donc ne peut pas être arrêté. Cependant, la sortie de jps dit le datanode être présent.
J'ai essayé formatage du namenode, modification des autorisations de propriétaire, mais il ne semble pas fonctionner. Espère que je n'ai pas manqué de toute autre information pertinente.
Merci d'avance.
Vous devez vous connecter pour publier un commentaire.
La solution qui a fonctionné pour moi a été de courir namenode et datanode un par un et pas à l'aide de
bin/start-all.sh
. Ce qui se passe à l'aide de cette approche est que l'erreur est clairement visible que si vous rencontrez un problème de réglage de la datanodes sur le réseau et aussi de nombreux messages sur stackoverflow suggèrent que le namenode nécessite un certain temps à démarrer, par conséquent, il devrait être donné un peu de temps pour commencer avant de commencer les datanodes. Aussi, dans ce cas, j'ai eu des problèmes avec différents identifiants de namenode et datanodes pour laquelle j'ai dû changer l'id de la datanode avec le même id que le namenode.Étape par étape la procédure à suivre sera:
bin/hadoop namenode
. Vérifier les erreurs, le cas échéant.bin/hadoop datanode
. Vérifier les erreurs, le cas échéant.Regardez votre namenode (probablement http://localhost:50070) et de voir comment beaucoup de datanodes il dit que vous avez.
Si c'est 0, alors soit votre datanode n'est pas en cours d'exécution ou il n'est pas configuré pour se connecter à la namenode.
Si elle est de 1, vérifier pour voir combien d'espace libre, il dit qu'il y a dans le DFS. Il se peut que le nœud de données n'a pas partout où il peut écrire des données (données de dir n'existe pas, ou n'a pas d'autorisations d'écriture).
bin/start-all.sh
, je n'aibin/hadoop namenode
,bin/hadoop datanode
et puisbin/start-mapred.sh
.Bien que résolu, je suis en ajoutant ce pour les futurs lecteurs. Cody conseils de l'inspection du début de namenode et datanode a été utile, et plus à l'enquête m'a conduit à supprimer les hadoop-magasin/dfs répertoire. Faire cela a résolu cette erreur pour moi.
J'ai eu le même problème, j'ai pris un coup d'oeil à la datanode journaux et il y avait un avertissement disant que le dfs.les données.dir avait autorisations incorrectes... alors j'ai juste changé et tout a fonctionné, ce qui est une sorte de bizarre.
Plus précisément, mon "dfs.les données.dir" est réglé sur "/home/hadoop/hd_tmp", et l'erreur que j'ai eu était:
Donc j'ai simplement exécuté ces commandes:
Et puis tout a bien fonctionné.
Dans mon cas, j'ai tort de définir une destination pour
dfs.name.dir
etdfs.data.dir
. Le format correct estJ'ai enlevé les propriétés supplémentaires dans le hdfs-site.xml et puis, ce problème a disparu. Hadoop a besoin d'améliorer leurs messages d'erreur. J'ai essayé de chacune des solutions ci-dessus et aucune n'a fonctionné.
J'ai rencontré le même problème. Quand j'ai regardé localhost:50070, sous le cluster résumé, toutes les propriétés ont montré que des 0 sauf "DFS Utilisé de 100%". Généralement, cette situation se produit parce qu'il y a des erreurs dans les trois *-site.xml fichiers sous HADOOP_INSTALL/conf et le fichier hosts.
Dans mon cas, la cause est impossible de résoudre le nom d'hôte. J'ai résolu le problème en ajoutant simplement "adresse ip nom d'hôte" à /etc/hosts.
Dans mon cas, j'ai dû supprimer:
/tmp/hadoop-<user-name>
dossier et format et commencer à utilisersbin/start-dfs.sh
sbin/start-yarn.sh