Hadoop java.io.IOException:Mkdirs无法创建/ some/path

ali*_*n01 41 hadoop microsoft-distributed-file-system ioexception

当我尝试运行我的Job时,我收到以下异常:

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)
Run Code Online (Sandbox Code Playgroud)

/ some/path的位置是hadoop.tmp.dir.但是,当我在/ some/path上发出dfs -ls cmd时,我可以看到它存在并且数据集文件存在(在午餐之前复制了该文件).此外,路径在hadoop配置中正确定义.任何建议将不胜感激.我正在使用hadoop 0.21.

Tod*_*met 88

刚刚在我的MacBook Air中以独立模式从CDH4运行mahout遇到了这个问题.

问题是在解除mahout作业时,在不区分大小写的文件系统上创建了/ 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
Run Code Online (Sandbox Code Playgroud)

然后用它验证它

jar tvf mahout-examples-0.6-cdh4.0.0-job.jar | grep -i license
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 哇,非常感谢,这也是我的问题.为了更清楚一点:"mahout-examples-0.6-cdh4.0.0-job.jar"是要执行的mapreduce工作.所以一般情况是:zip -d <your_job.jar> META-INF/LICENSE (4认同)
  • @ alex9311我和你的问题一样,我用它来解决它:`zip -d examples.jar LICENSE` (2认同)

ngr*_*ain 13

问题是OSX特定的,因为默认情况下,文件系统在Mac上设置为 不区分大小写(保留大小写但不区分大小写,我认为非常糟糕).

避免这种情况的黑客攻击是创建一个带有磁盘实用程序的.dmg磁盘映像,该映像是区分大小写的,并使用以下命令(作为超级用户)将此映像挂载到您需要它的位置(即hadoop.tmp.dir或/ tmp):

sudo hdiutil attach -mountpoint /tmp <my_image>.dmg
Run Code Online (Sandbox Code Playgroud)

我希望它有所帮助.


RAT*_*ora 11

我过去曾多次遇到过这个问题,我认为这是Mac特有的问题.因为我使用Maven来构建我的项目,所以我能够通过在我的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>
Run Code Online (Sandbox Code Playgroud)


Chr*_*ite 9

这是正在创建的本地磁盘上的文件(将作业jar解压缩到),而不是HDFS中的文件.检查你有权使用mkdir这个目录(从命令行试试)

  • 是的,我检查过,我有mkdir的许可,但仍然有问题. (9认同)
  • @hakunami为什么接受这个答案? (6认同)
  • @WaiHaLee最高投票答案往往没有被选中,但OP甚至明确表示这个答案不起作用.离奇! (2认同)

Gar*_*rry 8

在我的情况下,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>
Run Code Online (Sandbox Code Playgroud)