Hadoop java.io.IOException: Mkdirs no pudo crear/some/path
dfs (8)
Acabo de toparme con este problema ejecutando mahout desde CDH4 en modo independiente en mi MacBook Air.
El problema es que se crean un archivo / tmp / hadoop-xxx / xxx / LICENSE y un directorio / tmp / hadoop-xxx / xxx / license en un sistema de archivos insensible a mayúsculas / minúsculas al destrabar los trabajos mahout.
Pude solucionar esto borrando META-INF / LICENSE del archivo jar de esta manera:
zip -d mahout-examples-0.6-cdh4.0.0-job.jar META-INF/LICENSE
y luego verificado con
jar tvf mahout-examples-0.6-cdh4.0.0-job.jar | grep -i license
¡Espero que esto ayude!
Cuando intento ejecutar mi trabajo, recibo la siguiente excepción:
Exception in thread "main" java.io.IOException: Mkdirs failed to create /some/path
at org.apache.hadoop.util.RunJar.ensureDirectory(RunJar.java:106)
at org.apache.hadoop.util.RunJar.main(RunJar.java:150)
Donde / some / path es hadoop.tmp.dir. Sin embargo, cuando expido el dfs -ls cmd en / some / path, puedo ver que existe y que el archivo del conjunto de datos está presente (se copió antes de almorzar el trabajo). Además, la ruta está definida correctamente en las configuraciones de hadoop. Cualquier sugerencia será apreciada. Estoy usando hadoop 0.21.
El problema es específico de OSX debido a que, de forma predeterminada, el sistema de archivos está configurado para las mayúsculas y minúsculas en una Mac (preservando mayúsculas y minúsculas, que a mi juicio es muy malo).
Un truco para eludir esto es crear una imagen de disco .dmg con utilidad de disco que distinga entre mayúsculas y minúsculas y montar esta imagen donde la necesite (es decir, hadoop.tmp.dir o / tmp) con el siguiente comando (como superusuario):
sudo hdiutil attach -mountpoint /tmp <my_image>.dmg
Espero que ayude.
En mi caso, acabo de renombrar el archivo "log_test.txt"
Porque el sistema operativo (UBUNTU) intentaba generar una carpeta con el mismo nombre. "log_test.txt / __ results.json"
En mi caso, debajo de las líneas de código en pom.xml en el proyecto Maven funcionó en Mac.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
<exclude>META-INF/LICENSE*</exclude>
<exclude>license/*</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
Este es un archivo en el disco local que se está creando (para descomprimir el jar de trabajo), no en HDFS. Compruebe que tiene permisos para mkdir este directorio (pruébelo desde la línea de comandos)
Me encontré con este mismo problema al crear trabajos de MapReduce en una Mac con MacOS Sierra. El mismo código se ejecuta sin problemas en Ubuntu Linux (14.04 LTS y 16.04 LTS). La distribución de MapReduce fue 2.7.3 y se configuró para Single Node, operación independiente. El problema parece estar relacionado con la copia de archivos de licencia en un directorio META_INF. Mi problema fue resuelto agregando un transformador a la configuración del plugin de Maven Shade, específicamente: ApacheLicenseResourceTransformer
.
Aquí está la sección relevante de POM.xml, que va como parte de la sección <build>
:
<plugin> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>path.to.your.main.class.goes.here</mainClass>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer">
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
Tenga en cuenta que también utilizo ManifestResourceTransformer
para especificar la clase principal para el trabajo de MapReduce.
Me encontré con este problema varias veces en el pasado, creo que es un problema específico de Mac. Como utilizo Maven para construir mi proyecto, pude sortearlo agregando una línea en mi Maven pom.xml de esta manera:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer">
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
Verifique que el espacio requerido esté disponible o no. Este es un problema sobre todo debido a los problemas de espacio.