44

当我尝试运行作业时,出现以下异常:

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 时,我可以看到它存在并且数据集文件存在(在开始工作之前复制)。此外,在 hadoop 配置中正确定义了路径。任何建议将不胜感激。我正在使用 hadoop 0.21。

4

8 回答 8

94

刚刚在我的 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

然后用

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

希望这可以帮助!

于 2012-07-08T01:08:54.533 回答
13

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

避免这种情况的一种方法是使用区分大小写的磁盘实用程序创建一个 .dmg 磁盘映像,并使用以下命令(作为超级用户)将此映像安装在您需要的位置(即 hadoop.tmp.dir 或 /tmp):

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

我希望它有所帮助。

于 2012-11-26T18:14:10.967 回答
12

这是正在创建的本地磁盘上的文件(用于将您的作业 jar 解压到),而不是在 HDFS 中。检查您是否有权 mkdir 此目录(从命令行尝试)

于 2012-05-09T23:24:08.950 回答
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>
于 2012-11-01T16:12:28.383 回答
9

在我的例子中,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>
于 2015-09-21T15:24:19.647 回答
3

检查所需空间是否可用。这个问题主要是因为空间问题。

于 2015-07-01T13:07:47.147 回答
2

我在使用 MacOS Sierra 的 Mac 上构建 MapReduce 作业时遇到了同样的问题。相同的代码在 Ubuntu Linux(14.04 LTS 和 16.04 LTS)上运行没有问题。MapReduce 发行版是 2.7.3,并配置为单节点独立操作。该问题似乎与将许可证文件复制到 META_INF 目录有关。我的问题是通过在 Maven Shade 插件配置中添加一个转换器来解决的,特别是: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 作业的主类。

于 2017-02-10T17:09:27.093 回答
0

就我而言,我只是将文件重命名为“log_test.txt”

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

于 2016-10-22T13:02:41.393 回答