web-dev-qa-db-ja.com

Hadoop Java.io.IOException:Mkdirsが/ some / pathの作成に失敗しました

ジョブを実行しようとすると、次の例外が発生します。

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 configsで正しく定義されています。任意の提案をいただければ幸いです。 hadoop 0.21を使用しています。

41
alien01

これは、HDFSではなく、(ジョブjarを解凍するために)作成されているローカルディスク上のファイルです。このディレクトリをmkdirする権限があることを確認します(コマンドラインから試してください)。

9
Chris White

MacBook AirでCDH4からスタンドアロンモードでmahoutを実行すると、この問題が発生しました。

問題は、mahoutジョブをunjarするときに、大文字と小文字を区別しないファイルシステムに/ 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

お役に立てれば!

86
Todd Nemet

問題はOSX固有です。Macではデフォルトでファイルシステムがcase-insensitiveに設定されているためです(大文字と小文字は区別されますが、大文字と小文字は区別されません。これは非常に悪いことです)。

これを回避するためのハックは、大文字と小文字を区別するディスクユーティリティで.dmgディスクイメージを作成し、次のコマンドでこのイメージを必要な場所(つまりhadoop.tmp.dirまたは/ tmp)にマウントすることです。 (スーパーユーザーとして):

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

役に立てば幸いです。

13
ngrislain

過去に何度かこの問題に遭遇しましたが、これは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>
11
RATabora

私の場合、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>
8
Garry

必要なスペースが使用可能かどうかを確認してください。これは主にスペースの問題が原因で発生する問題です。

3
Kumar Basapuram

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ジョブのメインクラスを指定していることに注意してください。

2
Manuel

私の場合、ファイル名を「log_test.txt」に変更しました

OS(UBUNTU)が同じ名前のフォルダーを生成しようとしたためです。 「log_test.txt/__ results.json」

0
Ammar Bozorgvar