Hadoop 出现 Failed to set permissions of path 的原因
2013-05-23 14:53
417 查看
在windows上运行hadoop程序时,会抛异常java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator-4954228\.staging to 0700 。抛异常的代码片段如下:
异常是job submit过程中调用setPermission函数进行文件权限设置时抛出的。setPermission流程如下:检查要设置的权限中组权限和其他权限是否相同,若不相同则调用本地方法设置;否则调用java.io.File的权限操作函数进行权限设置。
异常抛出的原因是 setReadable(false,false)返回的结果rv为false。checkReturnValue对rv进行检查抛出的。
Oracle网站上对java.io.File的权限操作进行了解释,解释如下:
可以发现,异常抛出的原因是由于设置文件不可读,而windows不支持这样的设置。跟踪代码调用栈可以发现设置文件不可读的代码如下:
针对这一问题,网络上比较流行的解决方法为:修改setPermission函数,让其直接返回。
注:对不存在的文件进行setWrittable设置会返回false
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
相关文章推荐
- Win环境下本地运行hadoop1版本出现访问权限问题 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 错误处理
- Failed to set permissions of path:\tmp\hadoop-yth\mapred\staging\yth-2036315919\.staging to 0700
- windows下Eclipse操作MapReduce例子报错:Failed to set permissions of path: \tmp\hadoop-Jerome\mapred\staging\
- windows hadoop HDFS Failed to set permissions of path
- Win7 eclipse Hadoop Failed to set permissions of path
- Hadoop Failed to set permissions of path
- windows下Eclipse操作MapReduce例子报错:Failed to set permissions of path: \tmp\hadoop-Jerome\mapred\staging\
- win7环境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
- hadoop Failed to set permissions of path:
- win7使用eclipse连接hadoop集群,运行mapreduce报错之Failed to set permissions of path
- hadoop学习笔记(4)-Windows7 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