LeaseExpiredException: нет ошибки аренды на HDFS - PullRequest
26 голосов
/ 26 сентября 2011

Я пытаюсь загрузить большие данные в HDFS, и иногда я получаю сообщение об ошибке ниже.есть идеи почему?

Ошибка:

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)

Ответы [ 6 ]

14 голосов
/ 27 сентября 2011

Мне удалось решить проблему:

Когда работа заканчивается, он удаляет / data / work / folder.Если параллельно выполняется несколько заданий, удаление также приведет к удалению файлов другого задания.на самом деле мне нужно удалить /data/work/.

Другими словами, это исключение выдается, когда задание пытается получить доступ к файлам, которых больше не существует

5 голосов
/ 13 апреля 2018

Я сталкиваюсь с той же проблемой, когда использую потоковую передачу искры для сохранения AsHadoopFile в Hadoop (2.6.0-cdh5.7.1), конечно же, я использую MultipleTextOutputFormat для записи различных данных в разные пути.Иногда происходило исключение, которое сказал Зоар .Причина в том, что Matiji66 говорят:

другая программа, читающая, записывающая и удаляющая этот файл tmp, вызывает эту ошибку.

но основная причина, по которой оня не говорил о том, что это спекулятивное слово hadoop:

Hadoop не пытается диагностировать и исправлять медленные задачи, вместо этого он пытается их обнаружить и запускает для них задачи резервного копирования.

Так что на самом деле причина в том, что ваша задача выполняется медленно, затем hadoop запускает другую задачу, чтобы сделать то же самое (в моем случае, это сохранить данные в файл на hadoop), когда одна задача из двух задач завершена, он удалит временный файл, а другой после завершения удалит тот же файл, после чего его не будет, поэтому исключение

не имеет открытых файлов

произошло

Вы можете исправить это, закрыв спекулятивную искру и адопу:

sparkConf.set("spark.speculation", "false");
sparkConf.set("spark.hadoop.mapreduce.map.speculative", "false");
sparkConf.set("spark.hadoop.mapreduce.reduce.speculative", "false")
1 голос
/ 10 августа 2017

В моем случае, другая программа, читающая, записывающая и удаляющая этот файл tmp, вызывает эту ошибку. Постарайтесь избежать этого.

0 голосов
/ 05 декабря 2017

Я столкнулся с этой проблемой, когда изменил свою программу на использование метода saveAsHadoopFile для повышения производительности, и в этом случае я не могу напрямую использовать API DataFrame. см. Проблему

Причина, по которой это может произойти, в основном состоит в том, что, как сказал Zohar , метод saveAsHadoopFile с MultipleTextOutputFormat фактически не позволяет нескольким программам, работающим одновременно, сохранять файлы в одном каталоге. Как только программа завершится, она удалит общий каталог _tevent, в котором все еще нуждаются другие, я не уверен, что это ошибка в M / R API. ( 2.6.0-cdh5.12.1 )

Вы можете попробовать это решение ниже, если вы не можете изменить дизайн своей программы:

Это исходный код FileOutputCommitter в M / R API: (вы должны загрузить соответствующую версию)

package org.apache.hadoop.mapreduce.lib.output;
public class FileOutputCommitter extends OutputCommitter {
private static final Log LOG = LogFactory.getLog(FileOutputCommitter.class);
/** 
 * Name of directory where pending data is placed.  Data that has not been
 * committed yet.
 */
public static final String PENDING_DIR_NAME = "_temporary";

Изменения:

"_temporary"

Кому:

System.getProperty("[the property name you like]")

Компилирует один класс со всеми необходимыми зависимостями, затем создает jar с тремя выходными файлами классов и помещает jar в ваш classpath. (сделайте это до оригинальной банки)

Или вы можете просто поместить исходный файл в ваш проект.

Теперь вы можете настроить временный каталог для каждой программы, установив другое системное свойство.

Надеюсь, это поможет вам.

0 голосов
/ 24 августа 2017

Я использую Sqoop для импорта в HDFS и имею ту же ошибку.С помощью предыдущих ответов я понял, что мне нужно удалить последний "/" из

--target-dir /dw/data/

Я использовал

--target-dir /dw/data
отлично работает
0 голосов
/ 15 февраля 2017

ПРИЧИНА ROOT

Политика хранения была установлена ​​для промежуточного каталога и, следовательно, сбой задания MAPREDUCE.

<property> <name>yarn.app.mapreduce.am.staging-dir</name> <value>/user</value> </property>

РАЗРЕШЕНИЕ

Настройка промежуточного каталога длякакая политика хранения не настроена.Т.е. измените yarn.app.mapreduce.am.staging-dir в yarn-site.xml

<property> 
<name>yarn.app.mapreduce.am.staging-dir</name> 
<value>/tmp</value> 
</property>
...