descargar descarga common commands hadoop hdfs

hadoop - descarga - hdfs dfs



LeaseExpiredException: no hay error de arrendamiento en HDFS (6)

Estoy intentando cargar datos grandes en HDFS y a veces me aparece el error a continuación. alguna idea de por qué?

El error:

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)


CAUSA PRINCIPAL

La política de almacenamiento se estableció en el directorio provisional y, por lo tanto, el trabajo MAPREDUCE falló.

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

RESOLUCIÓN

Configure el directorio provisional para el que no se configura la política de almacenamiento. Es decir, modificar yarn.app.mapreduce.am.staging-dir en yarn-site.xml

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


En mi caso, otro programa lee, escribe y elimina este archivo tmp causa este error. Intenta evitar esto.


Encontré este problema cuando cambié mi programa para usar el método saveAsHadoopFile para mejorar el rendimiento, en cuyo escenario no puedo usar la API DataFrame directamente. ver el problema

La razón por la que esto sucedería es básicamente lo que dijo Zohar , el método saveAsHadoopFile con MultipleTextOutputFormat en realidad no permite que se ejecuten simultáneamente varios programas para guardar archivos en el mismo directorio. Una vez que un programa terminó, eliminaría el directorio temporal común que los demás aún necesitan, no estoy seguro de si es un error en la API M / R. ( 2.6.0-cdh5.12.1 )

Puede probar esta solución a continuación si no puede rediseñar su programa:

Este es el código fuente de FileOutputCommitter en la API de M / R: (debe descargar una versión correspondiente)

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";

Cambios:

"_temporary"

A:

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

Compila la Clase única con todas las dependencias requeridas, luego crea un jar con los tres archivos de clase de salida y coloca el jar en su ruta de clase. (hazlo antes del frasco original)

O simplemente puede colocar el archivo fuente en su proyecto.

Ahora, puede configurar el directorio temporal para cada programa configurando una propiedad del sistema diferente.

Espero que te ayude.


Me encuentro con el mismo problema cuando uso la transmisión de chispa para guardarAsHadoopFile en Hadoop (2.6.0-cdh5.7.1), por supuesto, uso MultipleTextOutputFormat para escribir datos diferentes en una ruta diferente. A veces la excepción lo que dijo pasaría. La razón es como dice Matiji66 :

otro programa que lea, escriba y elimine este archivo tmp causa este error.

pero la razón raíz por la que no habló es el hadoop especulativo:

Hadoop no intenta diagnosticar y corregir tareas de ejecución lenta, en su lugar, intenta detectarlas y ejecuta tareas de respaldo para ellas.

Entonces, la razón real es que, su tarea se ejecuta lentamente, luego hadoop ejecuta otra tarea para hacer lo mismo (en mi caso es guardar datos en un archivo en hadoop), cuando una tarea de las dos tareas terminó, se eliminará la archivo temporal, y el otro después de terminado, eliminará el mismo archivo, entonces no existe, por lo que la excepción

no tiene ningún archivo abierto

sucedió

Puedes arreglarlo cerrando el especulativo de chispa y hadoop:

sparkConf.set("spark.speculation", "false"); sparkConf.set("spark.hadoop.mapreduce.map.speculative", "false"); sparkConf.set("spark.hadoop.mapreduce.reduce.speculative", "false")


Me las arreglé para solucionar el problema:

Cuando el trabajo termina, borra / data / work / folder. Si se ejecutan pocos trabajos en paralelo, la eliminación también eliminará los archivos del otro trabajo. en realidad necesito borrar / data / work /.

En otras palabras, esta excepción se produce cuando el trabajo intenta acceder a archivos que ya no existen


Utilizo Sqoop para importar a HDFS y tengo el mismo error. Con la ayuda de respuestas anteriores, me di cuenta de que necesitaba eliminar la última "/" de

--target-dir /dw/data/

solía

--target-dir /dw/data funciona bien