博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop Failed to set permissions of path
阅读量:6206 次
发布时间:2019-06-21

本文共 2215 字,大约阅读时间需要 7 分钟。

在Eclipse里面写了个測试程序:把HDFS中的数据批量导入到HBase中

写好后,在本地測试遇到了例如以下问题:

14/04/21 16:49:53 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

14/04/21 16:49:53 ERROR security.UserGroupInformation: PriviledgedActionException as:admin cause:java.io.IOException: Failed to set permissions of path: \tmp\hadoop-admin\mapred\staging\admin-1518427785\.staging to 0700
Exception in thread "main" java.io.IOException: Failed to set permissions of path: \tmp\hadoop-admin\mapred\staging\admin-1518427785\.staging to 0700
at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:690)
at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:662)
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:918)
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:1)
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:1149)
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:912)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:500)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:530)
at com.plocc.hadoop.hbase.BatchImport.main(BatchImport.java:104)

此时我把程序打包到Linux上执行是okey的,那说明是Windows下文件权限问题,

然后依据at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:690)这个错误信息找到了源代码,

然后一步步调试到Win32FileSystem.class中的

public native boolean setPermission(File f, int access, boolean enable, boolean owneronly);方法,

这个native格式的方法可能在c或者c++里面调用了,没法继续跟踪了,所以我这里的解决方法是把

private static void checkReturnValue(boolean rv, File p, 

                                       FsPermission permission
                                       ) throws IOException {
       
 if (!rv) {
      throw new IOException("Failed to set permissions of path: " + p + 
                            " to " + 
                            String.format("%04o", permission.toShort()));
    }
  }
  

标记经色部分的代码先凝视掉,保证在windows下測试通过。

转载地址:http://sowja.baihongyu.com/

你可能感兴趣的文章
创新创新再创新(2)
查看>>
PowerShell Studio 创建可视化工具- 扫描软件1.0
查看>>
Powershell学习笔记——函数和函数库
查看>>
ISCSI共享存储配置跟parted命令简述
查看>>
RHCE 学习笔记(31) - 防火墙 (下)
查看>>
linux运维常用命令一句话(持续更新中)
查看>>
【在他乡】好用,用好MindManager
查看>>
体验式培训之“铁人七项”
查看>>
IPv6的组播地址(掌握IPv6通信原理的关键知识点)
查看>>
真免费还是假炒作三问行业搅局者发钱狂
查看>>
Powershell管理系列(十八)PowerShell操作之定时删除过时文件
查看>>
Win7部署基础知识(7):使用Imagex捕获和安装映像
查看>>
python中的问号表达式
查看>>
C#互操作性入门系列(二):使用平台调用调用Win32 函数
查看>>
演示一个VPD进行数据访问控制的示例
查看>>
苹果免费Mac OS X和办公软件动了谁的奶酪
查看>>
浅谈普通人的“格局逆袭”
查看>>
一个IO的传奇一生(14)—— Linux中的MD开源RAID(2)
查看>>
千万别手欠执行stop slave
查看>>
Windows Phone 7 XNA开发之关于游戏组件
查看>>