2012年4月21日星期六

Hadoop报错,Failed to set permissions of path...staging to 0700

首先我已搭建了一个Hadoop开发环境,伪分布式,然后在Windows下用Eclipse连接进行开发。
Hadoop版本:1.0.1
 本机操作系统:Windows 7,虚拟机操作系统:Linux Mint
Windows下使用Eclipse 3.7,安装了Hadoop Map/Reduce 1.0.1插件,配置好后在Linux里运行一个Example,能正常运行,并且在Windows下Eclipse 里能看到DFS Locations 连接里的文件变化,结果成功输出到output,说明插件连接正常。

于是我直接在Eclipse里新建了Map/ReduceProject,将src\examples\org\apache\hadoop\examples\WordCount.java 复制过来,新建了名为org.apache.hadoop.examples的包(与源代码中相符),按照官网上的英文指南设置好Run configurations...运行,控制台错误信息如下:

12/04/21 19:41:30 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
12/04/21 19:41:30 ERROR security.UserGroupInformation: PriviledgedActionException as:F cause:java.io.IOException: Failed to set permissions of path: \home\fang\hadoop\data\mapred\staging\F1815921702\.staging to 0700
Exception in thread "main" java.io.IOException: Failed to set permissions of path: \home\fang\hadoop\data\mapred\staging\F1815921702\.staging to 0700
    at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:682)
    at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:655)
    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:850)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1093)
    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.hadoop.examples.WordCount.main(WordCount.java:67)

尝试 hadoop fs -chmod 777修改hdfs里目录权限未能解决。
尝试 chmod 777修改虚拟机里作为hadoop.tmp.dir目录权限也未能解决。
后来同时修改Eclipse那个连接里和虚拟机/hadoop/conf/core-site.xml  的hadoop.tmp.dir一项,改为/home/fang/tempdata
stop-all.sh后重新format,然后重新start-all.sh,问题仍未解决。同时,错误信息的\home\fang\hadoop\data\mapred\staging\ 部分没有改变。
这个问题实在难以解决。网上有人说自己编译Hadoop或许能解决这个问题。
————————————————————————————————
最后我是在Linux里装了Eclipse,在Linux下开发来回避这个问题的。