解决org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z

来源:互联网 发布:淘宝淘客联盟 编辑:程序博客网 时间:2024/06/03 02:27

相信很多人在本地调试hadoop都踩了无数坑。这里我记录一下我踩得一个巨大的坑。。。
网上常见的问题比如

(Failed to locate the winutils binary in the hadoop binary path Java.io.IOException: Could not locate executablenull\bin\winutils.exe in the Hadoop binaries.问题)

解决办法是:
  1.1下载winutils的windows版本
  GitHub上,有人提供了winutils的windows的版本,项目地址是:https://github.com/srccodes/hadoop-common-2.2.0-bin,直接下载此项目的zip包,下载后是文件名是hadoop-common-2.2.0-bin-master.zip,随便解压到一个目录
  1.2配置环境变量
  增加用户变量HADOOP_HOME,值是下载的zip包解压的目录,然后在系统变量path里增加$HADOOP_HOME\bin 即可。  
  再次运行程序,正常执行。

解决完之后,发现又报了一个

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

这时候我们需要把 hadoop-common-2.2.0-bin-master下的bin的hadoop.dll放到C:\Windows\System32下!
这里注意!有个大坑!—版本问题,刚才我们用的是2.2.0,实际上我的hadoop版本是2.6.0,所以上述步骤弄完发现并没有解决问题,好在我找到了2.6.0下面的hadoop.dll(我一激动忘记把资源记下来了)。然后同上,将该版本复制到C:\Windows\System32下
重启发现,还TMD有问题!

打开这个异常的源码查看源码,讲access方法更改一下:
这里写图片描述
把原方法的return注释掉,改为return true,如图。

这里说明一下,有人会问怎么改源码,如图:
这里写图片描述
自己写一个包(和源码包路径一样),然后写上和源码一样的类NativeIO,把源码复制过来后再改就行啦。有人又问,源码怎么找,这个自己百度如何导入源码吧。

然后就没有问题了……

阅读全文
1 0
原创粉丝点击