LeaseExpiredException: Aucune erreur de bail sur HDFS
Je suis en train de charger des données de grande taille à HDFS et parfois, j'ai l'erreur ci-dessous. aucune idée pourquoi?
L'erreur:
org.apache.hadoop.ipc.RemoteException: org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException: No lease on /data/work/20110926-134514/_temporary/_attempt_201109110407_0167_r_000026_0/hbase/site=3815120/day=20110925/107-107-3815120-20110926-134514-r-00026 File does not exist. Holder DFSClient_attempt_201109110407_0167_r_000026_0 does not have any open files.
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNamesystem.java:1557)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNamesystem.java:1548)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.completeFileInternal(FSNamesystem.java:1603)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.completeFile(FSNamesystem.java:1591)
at org.apache.hadoop.hdfs.server.namenode.NameNode.complete(NameNode.java:675)
at sun.reflect.GeneratedMethodAccessor16.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:557)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1434)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1430)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1428)
at org.apache.hadoop.ipc.Client.call(Client.java:1107)
at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:226)
at $Proxy1.complete(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 $Proxy1.complete(Unknown Source)
at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.closeInternal(DFSClient.java:3566)
at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.close(DFSClient.java:3481)
at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.close(FSDataOutputStream.java:61)
at org.apache.hadoop.fs.FSDataOutputStream.close(FSDataOutputStream.java:86)
at org.apache.hadoop.io.SequenceFile$Writer.close(SequenceFile.java:966)
at org.apache.hadoop.io.SequenceFile$BlockCompressWriter.close(SequenceFile.java:1297)
at org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat$1.close(SequenceFileOutputFormat.java:78)
at org.apache.hadoop.mapreduce.lib.output.MultipleOutputs$RecordWriterWithCounter.close(MultipleOutputs.java:303)
at org.apache.hadoop.mapreduce.lib.output.MultipleOutputs.close(MultipleOutputs.java:456)
at com.my.hadoop.platform.sortmerger.MergeSortHBaseReducer.cleanup(MergeSortHBaseReducer.java:145)
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:178)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:572)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:414)
at org.apache.hadoop.mapred.Child$4.run(Child.java:270)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)
at org.apache.hadoop.mapred.Child.main(Child.java:264)
source d'informationauteur zohar
Vous devez vous connecter pour publier un commentaire.
J'ai réussi à résoudre le problème:
Quand le travail se termine, il supprime /data/travaux/dossier. Si peu d'emplois sont en cours d'exécution en parallèle de la suppression supprime également les fichiers d'un autre emploi. en fait j'ai besoin de supprimer des données /de/travail/.
En d'autres mots, cette exception est levée lorsque le travail essayez d'accéder à des fichiers qui ne sont pas existé plus
Je rencontre le même problème lorsque j'utilise spark streaming pour saveAsHadoopFile à Hadoop(2.6.0-cdh5.7.1), bien sûr j'utilise MultipleTextOutputFormat pour écrire des données différentes pour différentes chemin. Parfois, à l'exception de ce Zohar dit qui allait arriver. La raison en est que Matiji66 dire:
mais la racine de la raison pour laquelle il n'a pas parler, c'est de l'hadoop spéculative:
Donc vraiment la raison en est que, votre tâche exécuter lente, puis hadoop exécuter une autre tâche de faire la même chose(dans mon cas, c'est pour enregistrer des données dans un fichier sur hadoop), quand on tâche de les deux de la tâche terminée, il va supprimer les fichiers temporaires, et les autres après avoir fini, il va supprimer le même fichier, il n'existe pas, de sorte que l'exception
qui s'est passé
vous pouvez le fixer par la proximité de la spéculation de l'étincelle et hadoop:
Pour mon cas, un autre programme de lecture,d'écriture et de supprimer ce fichier tmp l'origine de cette erreur.
Essayez d'éviter cela.
CAUSE
La politique de stockage a été mis sur la mise en scène du répertoire et donc MAPREDUCE travail a échoué.
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/user</value>
</property>
RÉSOLUTION
De configuration du répertoire de transit pour qui la politique de stockage n'est pas de l'installation. I. e. modifier fil.app.mapreduce.am.mise en scène-dir en yarn-site.xml
- Je utiliser Sqoop à l'importation dans HDFS et ont même erreur. Par l'aide de la réponse à la question précédente, j'ai réalisé que j'avais besoin de supprimer le dernier "/" de
J'ai utilisé
fonctionne très bien
J'ai rencontré ce problème quand j'ai changé mon programme à utiliser saveAsHadoopFile méthode pour améliorer les performances, dans le scénario, je ne peux pas faire usage de DataFrame directement l'API. voir le problème
La raison pour laquelle ce qui allait se passer est essentiellement ce Zohar dit, le saveAsHadoopFile méthode avec MultipleTextOutputFormat en réalité ne permettent à plusieurs programmes simultanément en cours d'exécution pour enregistrer les fichiers dans le même répertoire. Une fois le programme terminé, il aurait pour effet de supprimer la commune _temporary répertoire autres encore besoin, je ne suis pas sûr si c'est un bug en M/R API. (2.6.0-cdh5.12.1)
Vous pouvez essayer cette solution ci-dessous si vous ne pouvez pas revoir la conception de votre programme:
C'est le code source de FileOutputCommitter en M/R API: (vous devez télécharger une selon version)
Changements:
:
Compile la Classe unique avec toutes les dépendances nécessaires, puis crée un pot avec trois de sortie des fichiers de classe et les lieux du bocal pour vous classpath. (le faire avant que le pot d'origine)
Ou, vous pouvez simplement mettre le fichier source de votre projet.
Maintenant, vous pouvez config le répertoire temp, pour chaque programme, la définition d'un autre système de la propriété.
Espère que cela peut vous aider.