Exception in thread "main"java.io.IOException: Failed to set permissions of path

3445 ワード

BuildForestを走っている間に、次のプログラムを書きました.
 
package test.breiman;



import org.apache.mahout.classifier.df.mapreduce.BuildForest;

/**

 * BuildForecast 

 * @author fansy

 */

public class BuildForestFollow {

	public static void main(String[] args) throws Exception{

		String[] arg=new String[]{

				"-d","hdfs://ubuntu:9000/user/breiman/input/glass.data",

				"-ds","hdfs://ubuntu:9000/user/breiman/glass.info",

				"-sl","5",

				"-p",

				"-t","10",

				"-o","hdfs://ubuntu:9000/user/mahout/output-forest1"

		};

		BuildForest.main(arg);

	}

}


その結果、実行すると、次のエラーが発生しました.
 
 
13/09/20 17:34:22 INFO mapreduce.BuildForest: Partial Mapred implementation

13/09/20 17:34:22 INFO mapreduce.BuildForest: Building the forest...

13/09/20 17:34:22 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

13/09/20 17:34:22 ERROR security.UserGroupInformation: PriviledgedActionException as:Administrator cause:java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator537639001\.staging to 0700

Exception in thread "main" java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator537639001\.staging to 0700

	at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:689)

	at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:662)

	at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:509)

	at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:344)

	at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:189)

	at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:116)

	at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:856)

	at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:1)

	at java.security.AccessController.doPrivileged(Native Method)

	at javax.security.auth.Subject.doAs(Subject.java:415)

	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)

	at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:850)

	at org.apache.hadoop.mapreduce.Job.submit(Job.java:500)

	at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:530)

	at org.apache.mahout.classifier.df.mapreduce.Builder.runJob(Builder.java:255)

	at org.apache.mahout.classifier.df.mapreduce.Builder.build(Builder.java:296)

	at org.apache.mahout.classifier.df.mapreduce.BuildForest.buildForest(BuildForest.java:229)

	at org.apache.mahout.classifier.df.mapreduce.BuildForest.run(BuildForest.java:189)

	at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)

	at org.apache.mahout.classifier.df.mapreduce.BuildForest.main(BuildForest.java:253)

	at test.breiman.BuildForestFollow.main(BuildForestFollow.java:18)


インターネットで探して、hadoopの関連パッケージを交換しなければならないと言っています.しかし、私は以前他のJobを実行していたので、この問題はネット上の解決方法ではなく、他のものであるべきです.前にこの問題に遭遇した時に一度解決しましたが、当時は記録されておらず、結局忘れてしまいました.めまいがする..
 
今回の解決策は、BuildForestのソースコードを見て、パスの設定がoutputPathであることを見ることです.getName();同時にconfigurationはデフォルトに従います.これではだめに違いないので、対応するコードを修正してoutputPath.getName()をoutputPathに変更します.toString()は、configurationにメインノードに関する情報を添付しておけばいいです.