ジョブを実行しようとすると、次の例外が発生します。
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を使用しています。
これは、HDFSではなく、(ジョブjarを解凍するために)作成されているローカルディスク上のファイルです。このディレクトリをmkdirする権限があることを確認します(コマンドラインから試してください)。
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
お役に立てれば!
問題はOSX固有です。Macではデフォルトでファイルシステムがcase-insensitiveに設定されているためです(大文字と小文字は区別されますが、大文字と小文字は区別されません。これは非常に悪いことです)。
これを回避するためのハックは、大文字と小文字を区別するディスクユーティリティで.dmgディスクイメージを作成し、次のコマンドでこのイメージを必要な場所(つまりhadoop.tmp.dirまたは/ tmp)にマウントすることです。 (スーパーユーザーとして):
Sudo hdiutil attach -mountpoint /tmp <my_image>.dmg
役に立てば幸いです。
過去に何度かこの問題に遭遇しましたが、これは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>
私の場合、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>
必要なスペースが使用可能かどうかを確認してください。これは主にスペースの問題が原因で発生する問題です。
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ジョブのメインクラスを指定していることに注意してください。
私の場合、ファイル名を「log_test.txt」に変更しました
OS(UBUNTU)が同じ名前のフォルダーを生成しようとしたためです。 「log_test.txt/__ results.json」