相信很多人在本地调试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,把源码复制过来后再改就行啦。有人又问,源码怎么找,这个自己百度如何导入源码吧。
然后就没有问题了……