HDFS 异常错误:Mkdirs无法创建/some/路径

vfhzx4xs  于 2022-12-09  发布在  HDFS
关注(0)|答案(8)|浏览(291)

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

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命令时,我可以看到它存在,并且数据集文件存在(在启动作业之前复制)。此外,该路径在Hadoop配置中定义正确。任何建议都将受到感谢。我使用的是hadoop 0.21。

rhfm7lfc

rhfm7lfc1#

刚刚遇到这个问题运行mahout从cdh 4在独立模式在我的MacBook空气。
问题在于,当解除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

希望这对你有帮助!

xienkqul

xienkqul2#

这个问题是OSX特有的,这是由于默认情况下文件系统在Mac上被设置为不区分大小写(保留大小写,但不区分大小写,在我看来这是非常糟糕的)。
一种解决方法是使用disk utility(区分大小写)创建.dmg磁盘映像,并使用以下命令(以超级用户身份)将此映像挂载到需要的位置(即hadoop.tmp.dir或/tmp):

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

希望能帮上忙。

mctunoxg

mctunoxg3#

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

nafvub8i

nafvub8i4#

我在过去遇到过几次这个问题,我相信这是一个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>
lskq00tm

lskq00tm5#

在我的情况下,下面的代码行在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>
qgzx9mmu

qgzx9mmu6#

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

kiayqfof

kiayqfof7#

我在使用MacOS Sierra在Mac上构建MapReduce作业时遇到了同样的问题。(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作业的主类。

6tr1vspr

6tr1vspr8#

在我的例子中,我只是将文件重命名为“log_test. txt”
因为操作系统(UBUNTU)试图生成同名文件夹。“log_test.txt/__results.json”

相关问题