Hadoop 出现 Failed to set permissions of path 的原因
来源:互联网 发布:帝国时代3mac汉化补丁 编辑:程序博客网 时间:2024/05/18 18:03
在windows上运行hadoop程序时,会抛异常java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator-4954228\.staging to 0700 。抛异常的代码片段如下:
package org.apache.hadoop.fs;public class FileUtil { /** * Set permissions to the required value. Uses the java primitives instead * of forking if group == other. * @param f the file to change * @param permission the new permissions * @throws IOException */ public static void setPermission(File f, FsPermission permission ) throws IOException { FsAction user = permission.getUserAction(); FsAction group = permission.getGroupAction(); FsAction other = permission.getOtherAction(); // use the native/fork if the group/other permissions are different // or if the native is available if (group != other || NativeIO.isAvailable()) { execSetPermission(f, permission); return; } boolean rv = true; // read perms rv = f.setReadable(group.implies(FsAction.READ), false); checkReturnValue(rv, f, permission); if (group.implies(FsAction.READ) != user.implies(FsAction.READ)) { f.setReadable(user.implies(FsAction.READ), true); checkReturnValue(rv, f, permission); } // write perms rv = f.setWritable(group.implies(FsAction.WRITE), false); checkReturnValue(rv, f, permission); if (group.implies(FsAction.WRITE) != user.implies(FsAction.WRITE)) { f.setWritable(user.implies(FsAction.WRITE), true); checkReturnValue(rv, f, permission); } // exec perms rv = f.setExecutable(group.implies(FsAction.EXECUTE), false); checkReturnValue(rv, f, permission); if (group.implies(FsAction.EXECUTE) != user.implies(FsAction.EXECUTE)) { f.setExecutable(user.implies(FsAction.EXECUTE), true); checkReturnValue(rv, f, permission); } } 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())); } }}
异常是job submit过程中调用setPermission函数进行文件权限设置时抛出的。setPermission流程如下:检查要设置的权限中组权限和其他权限是否相同,若不相同则调用本地方法设置;否则调用java.io.File的权限操作函数进行权限设置。
异常抛出的原因是 setReadable(false,false)返回的结果rv为false。checkReturnValue对rv进行检查抛出的。
Oracle网站上对java.io.File的权限操作进行了解释,解释如下:
可以发现,异常抛出的原因是由于设置文件不可读,而windows不支持这样的设置。跟踪代码调用栈可以发现设置文件不可读的代码如下:
package org.apache.hadoop.mapreduce;public class JobSubmissionFiles { // job submission directory is private! final public static FsPermission JOB_DIR_PERMISSION = FsPermission.createImmutable((short) 0700); // rwx--------}
针对这一问题,网络上比较流行的解决方法为:修改setPermission函数,让其直接返回。
注:对不存在的文件进行setWrittable设置会返回false
- Hadoop 出现 Failed to set permissions of path 的原因
- hadoop Failed to set permissions of path:
- Hadoop Failed to set permissions of path
- Hadoop Failed to set permissions of path
- Win7 eclipse Hadoop Failed to set permissions of path .
- Win7 eclipse Hadoop Failed to set permissions of path
- Win7 eclipse Hadoop Failed to set permissions of path
- windows hadoop HDFS Failed to set permissions of path
- Hadoop Failed to set permissions of path 错误处理
- Win7 eclipse Hadoop Failed to set permissions of path
- Win7 eclipse Hadoop Failed to set permissions of path
- Win7 eclipse Hadoop Failed to set permissions of path
- Hadoop Failed to set permissions of path 错误处理
- Hadoop Failed to set permissions of path 错误处理
- 异常eclipse Hadoop Failed to set permissions of path的解决
- hadoop下运行mapreduce程序Failed to set permissions of path:的解决
- Failed to set permissions of path:
- hadoop学习笔记(4)-Windows7 eclipse Hadoop Failed to set permissions of path
- 正则表达式
- C++: byte和int的相互转化
- jquery常用基本用法
- LA 3713 - Astronauts 2-SAT
- ORA-01078 ORA-01565 ORA-17503 ORA-15077
- Hadoop 出现 Failed to set permissions of path 的原因
- nc57数据库语句笔记-查找
- 终于有自己的博客啦
- 微信公众平台 回复图文信息方法优化(PHP)
- Mysql数据库的连接
- 虚拟机的linux系统设置NAT方式上网
- NSXMLParser详解
- jquery选择器中加变量参数
- hudson+ant+svn配置flash持续集成开发环境