最近实习了,公司做大数据的,要学hadoop,在公司自己把什么都弄好了,因为回来了想自学,
所以想自己虚拟机搭个伪分布式环境,然后自学用,一切都准备好后,eclipse下也已经安装了
hadoop的插件,wordCount也写好了,运行的时候就报了
org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)V
错误,这都是上周末的事情了,然后我嫌烦没有解决,反正当时也不急用,这周继续解决问题,
耗了好久好久时间。
我的环境是
Win10 + hadoop2.7.3 + jdk1.8。
本来在公司使用eclipse写mapreduce程序的时候已经遇到这个问题,当时的确也通过把hadoop.dll
和winutils放到hadoop的bin目录下。然后问题解决了,但是在自己电脑上依然这样做,什么方法都
试了都不行。
hadoop.dll 和 winutils 以及 修改了NativeIO.java (网上常见的方法)全试了,依旧提示这个错误。
解决方案:
1.首先把对应版本的hadoop.dll 和 winutils放到hadoop安装目录的bin目录下。
因为后来版本的hadoop的确缺少了这两个文件。
2.环境变量的配置,这个不多说。
3.比如我写了一个wordcount,运行时一直报这个错误,把下面代码放到wordcount的驱动程序中。
static {
try {
System.load("D:/Hadoop/hadoop-2.7.3/bin/hadoop.dll");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load.\n" + e);
System.exit(1);
}
}
意思就是让其强制加载bin目录下的hadoop.dll。然后运行程序问题就解决了。
4.把加入的代码删除即可,不再报错。
hadoop.dll ,winutils 以及 hadoop2.7.3的eclipse插件下载地址:
https://pan.baidu.com/s/1Lz0Ah2QklzgsNVnLXPRcYw
提取码:0yz8
以上方案亲测有效。