win7使用eclipse连接hadoop集群,运行mapreduce报错之Failed to set permissions of path

来源:互联网 发布:java获取文件夹的路径 编辑:程序博客网 时间:2024/05/19 01:30

在win7上使用eclipse连接hadoop集群运行mapreduce任务(Java编写)时出现如下错误提示,导致运行mapreduce作业失败

15/09/05 20:42:58 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

15/09/05 20:42:58 INFO security.JniBasedUnixGroupsMappingWithFallback: Falling back to shell based
15/09/05 20:42:59 ERROR security.UserGroupInformation: PriviledgedActionException as:lenovo cause:java.io.IOException: Failed to set permissions of path: \home\suh\hadoop-1.2.1\tmp\mapred\staging\lenovo1496408529\.staging to 0700
Exception in thread "main" java.io.IOException: Failed to set permissions of path: \home\suh\hadoop-1.2.1\tmp\mapred\staging\lenovo1496408529\.staging to 0700
at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:691)
at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:664)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:514)
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:349)
at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:193)
at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:126)
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:942)
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:936)
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:1190)
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:936)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:550)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:580)
at org.dataguru.mr.kpi.MinTemperature.run(MinTemperature.java:86)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at org.dataguru.mr.kpi.MinTemperature.main(MinTemperature.java:127)


问题分析:
关键错误信息“Failed to set permissions of path”,这个打印信息是hadoop源码里 hadoop-1.2.1\src\core\org\apache\hadoop\fs\FileUtil.java 里checkReturnValue方法抛出的IOException。
所以只需要将里面的异常注释掉,或改为警告信息即可,我将其改为警告,不抛出运行时IO异常。
  private static void checkReturnValue(boolean rv, File p, 
                                       FsPermission permission
                                       ) throws IOException {
    if (!rv) {
      LOG.warn("Failed to set permissions of path: " + p + 
                            " to " + 
                            String.format("%04o", permission.toShort()));
 //throw new IOException("Failed to set permissions of path: " + p + 
      //                      " to " + 
      //                      String.format("%04o", permission.toShort()));
    }
  }


解决方案:
方案一:(本人采用的办法)
将checkReturnValue方法改写后,直接把FileUtil.java直接放到项目工程中,注意路径必须为org.apache.hadoop.fs.FileUtil.java;


方案二:
将checkReturnValue方法改写后,将hadoop-1.2.1\src\core包重新编译(可以使用ant,也可以直接使用eclipse),编译成hadoop-1.2.1-core.jar,然后替换hadoop集群中的该jar文件。
0 0
原创粉丝点击