Hadoop java.io.IOException:Mkdirs无法创build/某些/path

当我尝试运行我的工作时,我收到以下exception:

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) 

/ some / path是hadoop.tmp.dir。 但是,当我在/ some / path上发出dfs -ls cmd时,我可以看到它存在并且数据集文件存在(在执行作业之前被复制)。 此外path在hadoopconfiguration中正确定义。 任何build议将不胜感激。 我正在使用hadoop 0.21。

这是正在创build的本地磁盘上的一个文件(将您的作业jar解包),而不是HDFS。 检查你有没有mkdir这个目录的权限(从命令行试一下)

刚刚遇到这个问题在我的MacBook Air的独立模式下从CDH4运行mahout。

问题是在unjarring mahout作业时,在不区分大小写的文件系统上正在创build/ tmp / hadoop-xxx / xxx / LICENSE文件和/ tmp / hadoop-xxx / xxx / license目录。

我可以通过从jar文件中删除META-INF / LICENSE来解决这个问题:

 zip -d mahout-examples-0.6-cdh4.0.0-job.jar META-INF/LICENSE 

然后用它来validation

 jar tvf mahout-examples-0.6-cdh4.0.0-job.jar | grep -i license 

希望这可以帮助!

问题是OSX的具体情况,这是由于事实上,默认情况下,文件系统设置为Mac 不区分大小写 (案件保留,但不区分大小写,这对我来说是非常糟糕的)。

解决这个问题的方法是用磁盘工具创build一个大小写敏感的.dmg磁盘映像,并使用以下命令(以超级用户身份)将该映像安装在需要的位置(即hadoop.tmp.dir或/ tmp):

 sudo hdiutil attach -mountpoint /tmp <my_image>.dmg 

我希望它有帮助。

我过去碰到过这个问题好几次了,我相信这是Mac的一个具体问题。 由于我使用Maven来构build我的项目,所以我可以通过在我的Maven pom.xml中添加一行来解决这个问题:

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

在我的情况下Maven项目中的pom.xml中的代码行在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> 

检查所需的空间是否可用。 这个问题大多是因为空间问题而得到的。

在Mac OS Sierra上构buildMac上的MapReduce作业时遇到了同样的问题。 相同的代码在Ubuntu Linux上运行没有问题(14.04 LTS和16.04 LTS)。 MapReduce的发行版本是2.7.3,并且configuration为单节点独立操作。 该问题似乎与将许可证文件复制到META_INF目录中有关。 我的问题是通过在Maven Shade插件configuration中添加一个转换器来解决的,具体是: ApacheLicenseResourceTransformer

这是POM.xml的相关部分,它作为<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> 

请注意,我也使用ManifestResourceTransformer来指定MapReduce作业的主类。

在我的情况下,我只是重命名文件“log_test.txt”

因为操作系统(UBUNTU)试图生成一个同名的文件夹。 “log_test.txt / __ results.json”

Interesting Posts