win7运行mapreduce报错Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

我们在本地(windows)运行mapreduce或者habase程序时,可能会出现如下错误
Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
Failed to locate the winutils binary in the hadoop binary path

这是因为hadoop主要是在Linux环境上运行的,对windows支持不是特别好。解决方法

1)下载winutils.exe:
GitHub上,有人提供了winutils的windows的版本,项目地址是:https://github.com/srccodes/hadoop-common-2.2.0-bin直接下载此项目的zip包,下载后是文件名是hadoop-common-2.2.0-bin-master.zip,随便解压到一个目录。
或者:

2)设置环境变量:

增加用户变量HADOOP_HOME,值是下载的zip包解压的目录,然后在系统变量path里增加$HADOOP_HOME\bin 即可。

最后,需要重启windows后,再次运行程序即可。

我们在hadoop源码中发现

private static String checkHadoopHome() {

    // first check the Dflag hadoop.home.dir with JVM scope
    String home = System.getProperty("hadoop.home.dir");

    // fall back to the system/user-global env variable
    if (home == null) {
      home = System.getenv("HADOOP_HOME");
    }
     ...
}

如果觉得添加环境变量的步骤操作很繁琐 ,也可以直接在代码加上

System.setProperty("hadoop.home.dir","D:\\Program Files\\hadoop-2.5.1");

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...