问题:在windows的eclipse中运行hadoop1.x MapReduce程序会报错:
Java.io.IOException: Failed to set permissions of path: \tmp\Hadoop-Administrator\mapred\staging\Administrator-519341271.staging to 0700
原因:这是Windows环境下的文件权限问题,在Linux下可以正常运行。
解决方法是:修改hadoop-1.2.1\src\core\org\apache\hadoop\fs\FileUtil.java里面的checkReturnValue方法。
修改源代码涉及到重编译,有些小伙伴可能觉得不会编译,或者编译了很久依然不行,下面我详细描述如何编译FileUtil.java。
步骤如下:
(1)在Eclipse中新建一个Map/Reduce Project。
file==>new==>other
(2)然后在src目录下新建一个包org.apache.hadoop.fs(注意严格按照这里的命名,不然后面执行M-R时会报错显示 notclassfound),再把hadoop-1.2.1\src\core\org\apache\hadoop\fs\FileUtil.java文件拷贝到这个包下面。
(3)打开FileUtil.java,修改checkReturnValue方法,直接注释掉报错部分代码:
(4)文件修改完成后,会在工作空间下工程的bin\org\apache\hadoop\fs目录下有FileUtil$CygPathCommand.class、FileUtil.class这两个类文件(如果没有,可以在eclipse里面再手动编译下)
注意:jdk版本的问题:Linux的是1.6 所以Windows上编译也必须1.6,否则不行。
(5)用解压工具打开hadoop-core-1.2.1.jar包,将上面两个文件拷贝到hadoop-core-1.2.1.jar\org\apache\hadoop\fs目录下,将原来的文件覆盖掉即可。如果嫌自己编译麻烦,可以使用博主自己编译好的hadoop-core-1.2.1.jar,亲测可用。
(6)然后将修改过的hadoop-core-1.2.1.jar分别替换hadoop安装目录和Linux系统上hadoop集群(每个节点)目录下的hadoop-core-1.2.1.jar。
(7)重新启动hadoop集群,通过eclipse执行MapReduce程序。