hadoop windows下例子无法运行
我在windows下用Cygwin运行hadoop0-20.203.0 示例无法运行。错误提示
lenovo@lenovo-1a5b3f83 /cygdrive/d/hadoop
$ bin/hadoop jar hadoop-examples-0.20.203.0.jar wordcount inputdir output>abc
java.io.IOException: Failed to set permissions of path: file:/tmp/hadoop-lenovo/ mapred/staging/lenovo-1126433021/.staging to 0700
at org.apache.hadoop.fs.RawLocalFileSystem.checkReturnValue(RawLocalFile System.java:525)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSys tem.java:499)
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.jav a:318)
at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:18 3)
at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmi ssionFiles.java:116)
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:797)
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:791)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInforma tion.java:1059)
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:7 91)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:465)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:494)
at org.apache.hadoop.examples.WordCount.main(WordCount.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(Progra mDriver.java:68)
at org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:139)
at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
[解决办法]
我看了下源代码的实现,setPermission实际上就是调用了File的setWritable方法,在这之前,它会调用SecurityManager.checkWrite来检查权限。因此可以肯定是权限的问题,你在cygwin中执行ls -l /tmp看看权限