在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】删除重新导入.

浙公网安备 33010602011771号