java fileutil 权限问题_【hadoop】——修改hadoop FileUtil.java,解决权限检查的问题...

在Hadoop Eclipse开发环境搭建这篇文章中,第15.)中提到权限相关的异常,如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

15/01/30 10:08:17 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

15/01/30 10:08:17 ERROR security.UserGroupInformation: PriviledgedActionException as:zhangchao3 cause:java.io.IOException: Failed to set permissions of path: \tmp\hadoop-zhangchao3\mapred\staging\zhangchao3502228304\.staging to 0700

Exception in thread "main" java.io.IOException: Failed to set permissions of path: \tmp\hadoop-zhangchao3\mapred\staging\zhangchao3502228304\.staging to 0700

at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:689)

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:856)

at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:850)

at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.Subject.doAs(Subject.java:415)

at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)

at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:850)

at org.apache.hadoop.mapreduce.Job.submit(Job.java:500)

at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:530)

at org.apache.hadoop.examples.WordCount.main(WordCount.java:68)

48304ba5e6f9fe08f3fa1abda7d326ab.png

根据提示信息,可以看到,这个异常是org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:689)行抛出来的,把这个位置的源代码贴出来,研究一下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

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()));

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

在上面的异常信息中,FileUtil.java:689行是 throw new IOException(“Failed to ….., 我直接将这个函数的if语句去掉,如下:

private static void checkReturnValue(boolean rv, File p, FsPermission permission)

throws IOException

{}

这样,chekReturnValue成为一个空函数,这样就不会对权限进行检查,在/home/hadoop/hadoop-1.0.3/中执行, ant jar进行编译,编译中可能遇到的问题见:编译hadoop遇到maven timeout ,编译好了后,生成如下的文件:

bdc465e6a7aed24b7ad9d97e5f05b0e7.png

将编译好生成的hadoop-core-1.0.4-SNAPSHOT.jar文件拷贝到windows上,使用Java Decoder可以看到checkReturnValue已经被修改:

979402bcc6759e438c2201ca1feb8081.png

将hadoop-core-1.0.4-SNAPSHOT.jar,修改为hadoop-core-1.0.3.jar文件,覆盖eclipse工程中的hadoop-core-1.0.3.jar文件:

89ad5a185e8f4fecb5619e28e2b0d41b.png       ------》    71e945e05d9bf49a727da7c17aa751cb.png

b46f212bfe219310e20ce78a5e8c253d.png

重新执行Run on hadoop,就可以成功的运行了。(如何执行Run on hadoop见:Hadoop Eclipse开发环境搭建11节)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
org.apache.hadoop.fs.FileUtilHadoop中的一个工具类,提供了一些常用的文件操作方法。下面是该类中一些常用方法的详解: 1. copy(FileSystem srcFS, Path src, FileSystem dstFS, Path dst, boolean deleteSource, Configuration conf):将一个文件从源文件系统复制到目标文件系统。如果deleteSource为true,则在复制成功后删除源文件。 2. listFiles(File dir):列出指定目录下的所有文件和子目录。返回值是一个File数组。 3. symlink(File target, File link):在link位置创建一个指向target的符号链接。该方法只在支持符号链接的文件系统上可用。 4. copyMerge(FileSystem srcFS, Path srcDir, FileSystem dstFS, Path dstFile, boolean deleteSource, Configuration conf, String addString):将指定目录下的所有文件合并成一个文件,并将结果存储在dstFile中。如果deleteSource为true,则在合并成功后删除源文件。addString参数是可选的,用于在每个文件之间添加一个字符串。 5. chmod(File path, String perm):更改指定路径的权限。perm参数是一个八进制数字,如“755”。 6. chown(File path, String owner, String group):更改指定路径的所有者和组。owner和group参数都是字符串类型。 7. getDU(File dir):计算指定目录中所有文件和子目录的总大小。返回值是一个long类型的数字,表示文件大小。 8. symLinkTarget(File link):返回指向指定符号链接的目标文件路径。如果link不是一个符号链接,则返回null。 9. setWritable(File path, boolean writable):设置指定路径的可写权限。 10. setReadable(File path, boolean readable):设置指定路径的可读权限。 11. setExecutable(File path, boolean executable):设置指定路径的可执行权限。 这些方法是org.apache.hadoop.fs.FileUtil类中的一部分,可以帮助你实现一些常见的文件操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值