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

在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值