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

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

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)

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

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

在上面的异常信息中,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 ,编译好了后,生成如下的文件:

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

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

       ------》    

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

修改后的jar包下载地址:http://download.csdn.net/download/uestczhangchao/8420249

时间: 2024-11-05 20:06:26

【hadoop】——修改hadoop FileUtil.java,解决权限检查的问题的相关文章

修改hadoop FileUtil.java,解决权限检查的问题

    在Hadoop Eclipse开发环境搭建这篇文章中,第15.)中提到权限相关的异常,如下: 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.UserGroupInformati

Hadoop 修改源码以及将修改后的源码应用到部署好的Hadoop中

我的Hadoop版本是hadoop-2.7.3, 我们可以去hadoop官网下载源码hadoop-2.7.3-src,以及编译好的工程文件hadoop-2.7.3, 后者可以直接部署. 前者hadoop-2.7.3-src必须mvn之后才能部署. 我们修改代码必须是在hadoop-2.7.3-src源码中进行, 而源码mvn之后才能部署或使用. 所以我们要先了解Maven.     mvn hadoop-2.7.3-src的时候会出现各种问题. 其中hadoop-2.7.3-src源码文件中有个

修改hadoop配饰文件文件后导致hive无法找到原有的dfs文件

修改了hadoop/etc/hadoop/core-site.xml文件中的 <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> 属性值后,会导致原有的hive数据找不到,需要到hive的metastore数据库中更改SDS表中的LOCATION属性,将对应的hdfs参数值改成新的值即可

排查Hive报错:org.apache.hadoop.hive.serde2.SerDeException: java.io.IOException: Start of Array expected

CREATE TABLE json_nested_test ( count string, usage string, pkg map<string,string>, languages array<string>, store map<string,array<map<string,string>>>) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS TE

Win10没有权限修改系统时间如何解决?

电脑发展到今天,时间的显示已经非常智能化.在Win10系统下,用户想要修改电脑时间,可以通过右下角时间区域进行调整.但是,有用户发现修改不了系统时间,提示没有权限.这是怎么回事?那要如何解决这样的问题呢?现在小编就和大家说一下Win10没有权限修改系统时间的解决方法. 步骤如下: 第一步.按"Win+r"组合键,运行"执行"对话框,输入"gpedit.msc",回车确认.如下图所示: 第二步.依次展开"计算机配置-Windows设置-安

跳过权限检查,强制修改mysql密码

windows: 1,停止MYSQL服务,CMD打开DOS窗口,输入 net stop mysql 2,在CMD命令行窗口,进入MYSQL安装目录 比如E:\Program Files\MySQL\MySQL Server 5.0\bin 示范命令: 输入 e:回车, 输入cd "E:\Program Files\MySQL\MySQL Server 5.0\bin" 注意双引号也要输入,这样就可以进入Mysql安装目录了. 3,进入mysql安全模式,即当mysql起来后,不用输入密

hadoop程序问题:java.lang.IllegalArgumentException: Wrong FS: hdfs:/ expected file:///

Java代码如下: FileSystem fs = FileSystem.get(conf); in = fs.open(new Path("hdfs://192.168.130.54:19000/user/hmail/output/part-00000")); 抛出异常如下: Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS: hdfs://192.168.130.54:

Hadoop:Hadoop单机伪分布式的安装和配置

http://blog.csdn.net/pipisorry/article/details/51623195 因为lz的linux系统已经安装好了很多开发环境,可能下面的步骤有遗漏. 之前是在docker中配置的hadoop单机伪分布式[Hadoop:Hadoop单机伪分布式的安装和配置 ],并且在docker只有root用户,所有没有权限问题存在. 这里直接在linux下配置,主要是为了能用netbeans ide调试hadoop程序,并且使用的用户就是开机时登录的用户pika. 本教程配置

Python菜鸟的Hadoop实战——Hadoop集群搭建

Hadoop集群的部署 网上很多关于hadoop集群部署的文章, 我这里重新整理下,毕竟,别人的经历,让你按照着完整走下来,总有或多或少的问题. 小技巧分享: 有些初学者喜欢在自己机器上安装虚拟机来部署hadoop,毕竟,很多同学的学习环境都是比较受限的. 我这里则直接选择了阿里云的机器,买了三台ECS作为学习环境.毕竟,最低配一个月才40多块,学习还是要稍微投入点的. 一. 基础环境准备 Windows不熟练,小主只有选择Linux了. 官方提示如下,Linux所需软件包括: JavaTM1.