java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries

查看hadoop源码发现里有这么一段:

public  static  final  String getQualifiedBinPath(String executable)
   throws  IOException {
     // construct hadoop bin path to the specified executable
     String fullExeName = HADOOP_HOME_DIR + File.separator + "bin"
       + File.separator + executable;
 
     File exeFile = new  File(fullExeName);
     if  (!exeFile.exists()) {
       throw  new  IOException( "Could not locate executable "  + fullExeName
         + " in the Hadoop binaries." );
     }
 
     return  exeFile.getCanonicalPath();
   }
 
private  static  String HADOOP_HOME_DIR = checkHadoopHome();
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" );
     }
      ...
}

明显应该是HADOOP_HOME的问题。如果HADOOP_HOME为空,必然fullExeName为null\bin\winutils.exe。解决方法很简单,配置环境变量,不想重启电脑可以在程序里加上:

1
System.setProperty( "hadoop.home.dir" , "E:\\Program Files\\hadoop-2.7.0" );

E:\\Program Files\\hadoop-2.7.0是我本机解压的hadoop的路径。

winutils.exe  下载地址

https://github.com/srccodes/hadoop-common-2.2.0-bin/tree/master/bin

你可能感兴趣的:(hadoop)