原
最近使用scala编写程序,在Windows系统下调试,对远程服务器上的hbase和hive中的表进行相应的操作,运行时报错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.
winutils.exe是在Windows系统上需要的hadoop调试环境工具,里面包含一些在Windows系统下调试hadoop、spark所需要的基本的工具类,另外在使用eclipse调试hadoop程序是,也需要winutils.exe,需要配置上面的环境变量。eclipse的插件可以在这里下载GitHub - winghc/hadoop2x-eclipse-plugin: eclipse plugin for hadoop 2.2.0 , 2.4.1
https://github.com/winghc/hadoop2x-eclipse-plugin 。
注意,下载的文件都是别人编译后的文件,有些下载的文件不全或者与系统的hadoop版本不对应,或者编译不成功,也会出现上面的问题,要想自己编译可参考https://www.zybuluo.com/ncepuwanghui/note/343755 这篇文章。
参考查阅了好多资料,遇到了好几个坑,浪费了许多时间,索性在这里记下来,一作为备忘,二来希望可以帮助更多的人跳过这些坑。
出现上面的问题,可能是因为windows环境下缺少winutils.exe文件或者版本不兼容的原因。
解决办法:
(1)下载winutils,注意需要与hadoop的版本相对应。
hadoop2.2版本可以在这里下载https://github.com/srccodes/hadoop-common-2.2.0-bin
hadoop2.6版本可以在这里下载https://github.com/amihalik/hadoop-common-2.6.0-bin
由于配置的测试集群是hadoop2.6,所以我在这里下载的是2.6.0版本的。下载后,将其解压。
(2)配置环境变量
①增加系统变量HADOOP_HOME,值是下载的zip包解压的目录,我这里解压后将其重命名为hadoop-common-2.6.0
②在系统变量path里增加%HADOOP_HOME%\bin
③重启电脑,使环境变量配置生效,上述问题即可解决。
添加系统变量HADOOP_HOME
编辑系统变量Path,添加%HADOOP_HOME%\bin;
再次运行程序,即可正常执行。
总结:
参考网上的技术贴的方式配置环境变量后还是出现相同的问题:
原因总结:可能的原因有
(1)版本不对,下载的是hadoop-common2.2的编译版本,最后在https://github.com/amihalik/hadoop-common-2.6.0-bin这里下载一个hadoop-common2.6的window编译版本(公司集群用的是hadoop2.6版本)
(2)原技术贴中说的是增加用户变量HADOOP_HOME,值是下载的zip包解压的目录,然后在系统变量path里增加%HADOOP_HOME%\bin 即可。而实际上应该是增加系统变量,如图是添加后的系统变量HADOOP_HOME(这里将下载后的hadoop-common-2.6.0-bin-master.zip文件解压到E:\SoftwareAPP\hadoop-common目录下,并将其文件名改为hadoop-common-2.6.0)
(3)参考http://blog.csdn.net/shawnhu007/article/details/51518879这篇文章 被坑后,发现其增加HADOOP_HOME系统变量(原文为用户变量,实际应为系统变量)后,在系统变量path里增加$HADOOP_HOME\bin(这里又有错误,而$应该是Linux系统下的环境变量配置,Windows系统下应该为%),实际应该编辑系统变量path,添加%HADOOP_HOME%\bin。配置完环境变量后,重启电脑即可。
这里将自己的实践操作经历写出来,希望可以帮到人,也感谢上面的技术贴,帮到自己找到了解决方向,最终成功地解决了该问题。
参考资料:
http://blog.csdn.net/baidu_19473529/article/details/54693523
http://blog.csdn.net/lanwenbing/article/details/40783335