在windows eclipse 上本地运行测试 写入本地权限解决

01 Exception in thread "main" java.lang.NullPointerException atjava.lang.ProcessBuilder.start(Unknown Source)

02 Exception: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z

 

问题 01

分析:

  下载Hadoop2以上版本时,在Hadoop2的bin目录下没有winutils.exe

解决:

  1.下载https://codeload.github.com/srccodes/hadoop-common-2.2.0-bin/zip /master下载hadoop-common-2.2.0-bin-master.zip,然后解压后,把hadoop-common-2.2.0- bin-master下的bin全部复制放到我们下载的Hadoop2的binHadoop2/bin目录下

 2.Eclipse-》window-》Preferences 下的Hadoop Map/Peduce( Windows下的 Eclipse上调试Hadoop2代码,所以我们在windows下的Eclipse配置hadoop-eclipse-plugin-2.6.0.jar插件 重启eclipse) 把下载放在我们的磁盘的Hadoop目录引进来

 3.Hadoop2配置变量环境HADOOP_HOME 和path

 

问题 02

分析:

    C:\Windows\System32下缺少hadoop.dll,把这个文件拷贝到C:\Windows\System32下面即可。

 解决:

    hadoop-common-2.2.0-bin-master下的bin的hadoop.dll放到C:\Windows\System32下,然后重启电脑  然而我们会发现还不能解决问题

我们在继续分析:     我们在出现错误的的atorg.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:557)我们来看这个类NativeIO的557行

    public static boolean access(String path, AccessRight desiredAccess)
        throws IOException {
        return true ;
//        return access0(path, desiredAccess.accessRight());
    }

 Windows的唯一方法用于检查当前进程的请求,在给定的路径的访问权限,所以我们先给以能进行访问,我们自己先修改源代码,return true 时允许访问。我们下载对应hadoop源代码,hadoop-2.6.0-src.tar.gz解压,hadoop-2.6.0-src\hadoop- common-project\hadoop-common\src\main\java\org\apache\hadoop\io\nativeio 下NativeIO.java 复制到对应的Eclipse的project,然后修改557行为return true   引入到工程后我们会发现工程会报错
其中 import sun.misc.Unsafe; 会飘红

解决方式

是访问限制报错.

  • 方法一:

全局属性Project>preferences>java>Compiler>Errors/Warnings>把右侧的【Deprecated and restricted API>Forbidden reference的Error】置为【Warning】. (我用的这个)

  • 方法二(终极方法:)

 项目属性preferences>java build path>把右侧【libraries中的JRE System Library】删除重新导入.

 

posted @ 2016-07-24 17:03  my_blog17  阅读(490)  评论(0)    收藏  举报