在Windows上通过Cygwin发生Hadoop错误:找不到null \ bin \ winutils.exe

当我设置HADOOP_HOME = / cygdrive / c / ecosystem / hadoop-2.5.1 ,然后尝试从Cygwin运行bin / hadoop fsbin / hadoop hadoop-streaming.jar时,出现以下错误:

ERROR [main] util.Shell (Shell.java:getWinUtilsPath(373)) - Failed to locate the winutils binary in the hadoop binary path java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries. at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:355) at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:370) at org.apache.hadoop.util.Shell.<clinit>(Shell.java:363) at org.apache.hadoop.util.GenericOptionsParser.preProcessForWindows(GenericOptionsParser.java:432) at org.apache.hadoop.util.GenericOptionsParser.parseGeneralOptions(GenericOptionsParser.java:478) at org.apache.hadoop.util.GenericOptionsParser.<init>(GenericOptionsParser.java:170) at org.apache.hadoop.util.GenericOptionsParser.<init>(GenericOptionsParser.java:153) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:64) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84) at org.apache.hadoop.fs.FsShell.main(FsShell.java:340) Exception in thread "main" java.lang.RuntimeException: core-site.xml not found at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:2269) at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:2195) at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:2112) at org.apache.hadoop.conf.Configuration.set(Configuration.java:989) at org.apache.hadoop.conf.Configuration.set(Configuration.java:961) at org.apache.hadoop.conf.Configuration.setBoolean(Configuration.java:1299) at org.apache.hadoop.util.GenericOptionsParser.processGeneralOptions(GenericOptionsParser.java:319) at org.apache.hadoop.util.GenericOptionsParser.parseGeneralOptions(GenericOptionsParser.java:479) at org.apache.hadoop.util.GenericOptionsParser.<init>(GenericOptionsParser.java:170) at org.apache.hadoop.util.GenericOptionsParser.<init>(GenericOptionsParser.java:153) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:64) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84) at org.apache.hadoop.fs.FsShell.main(FsShell.java:340) 

我可以访问bin / hadoop版本以及classpath和大多数其他命令。 我想也许我需要一个Windows风格的path,以便它可以符合\ bin \ winutils风格。 所以,我设置了HADOOP_HOME = c:\ ecosystem \ hadoop-2.5.1 ,这个错误消失了。 但是,现在我在Cygwin中运行时收到链接错误。 我用HADOOP_HOME = c:\ ecosystem \ hadoop-2.5.1通过Windows命令testing了hadoop,我可以运行MapReduce作业而没有问题。

我想成功运行Cygwin中的hadoop,我不想处理链接错误。 如果我保持HADOOP_HOME = / cygdrive / c / ecosystem / hadoop-2.5.1 ,有什么办法可以设置hadoop-config或其他文件来查找Windows样式path,如果Cygwinpath失败或为空? 也许像这样在hadoopconfiguration:

 if ["$HADOOP_HOME" = ""]; then HADOOP_HOME=$(cygpath -w "$HADOOP_HOME") fi 

显然,这个特定的代码在hadoop-config中不起作用,但是我想你会得到一般的想法。 任何帮助,将不胜感激。

Solutions Collecting From Web of "在Windows上通过Cygwin发生Hadoop错误:找不到null \ bin \ winutils.exe"

当我尝试在Windows本地执行Hadoop MR程序时,通过Eclipse设置环境变量HADOOP_HOME:Run-> Run Configurations-> Environment,我解决了与Eclipse类似的错误。

由于我能够通过Windows命令成功地运行Hadoop,所以浪费时间来弄清楚如何使它与cygwin一起工作没有什么意义。 相反,对于我的更大的Hadoop生态系统,我只是把它构建在linux上。 这是非常容易使用,是迄今为止我做的最好的决定。

尝试编辑hadoop / hdfs / yarn shell脚本,在调用JAVA命令的地方添加-Dhadoop.home.dir = right。

如果[“$ HADOOP_HOME”=“”];则可能需要添加这些shell脚本。 那么HADOOP_HOME = $(cygpath -w“$ HADOOP_HOME”)fi

最糟糕的情况是,你已经有了src访问权限编辑它,编译它并设置home变量,然后将它添加到jar中。

REF。 https://issues.apache.org/jira/browse/HADOOP-10133

HADOOP_OPTS =“$ HADOOP_OPTS -Dhadoop.home.dir =”$(cygpath -pw“$ HADOOP_PREFIX”)“”

基于此,我.zshrc下行添加到了我的.zshrc (或.bashrc ):

 export HADOOP_PREFIX=`cygpath -w $HADOOP_HOME` 

如果你还没有设置$ HADOOP_HOME ,你应该。