通过Cygwin在Windows上出现Hadoop错误:无法找到null \ bin \ winutils.exe

时间:2014-10-02 14:04:04

标签: windows hadoop

当我设置 HADOOP_HOME = / cygdrive / c / ecosystem / hadoop-2.5.1 ,然后尝试运行 bin / hadoop fs bin / hadoop来自Cygwin的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样式路径,以便它可以符合\ bin \ winutils样式。所以,我设置了 HADOOP_HOME = c:\ ecosystem \ hadoop-2.5.1 ,这个错误就消失了。但是,现在我在Cygwin中运行时收到链接错误。我通过Windows命令用 HADOOP_HOME = c:\ ecosystem \ hadoop-2.5.1 测试了hadoop,我可以毫无问题地运行MapReduce作业。

我想在Cygwin中成功运行hadoop,我不想处理链接错误。如果我保留 HADOOP_HOME = / cygdrive / c / ecosystem / hadoop-2.5.1 ,有没有什么方法可以设置hadoop-config或其他一些文件来查找如果Cygwin的Windows样式路径路径失败或为空?在hadoop-config中也许是这样的东西:

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

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

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

由于我能够通过Windows命令成功地使用Hadoop进行操作,因此浪费时间试图弄清楚如何使其与cygwin一起工作没有多大意义。相反,对于我更大的Hadoop生态系统,我只是在linux上构建它。它非常易于使用,是迄今为止我做出的最佳决定。

答案 2 :(得分:0)

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

您可能必须添加这些shell脚本 如果[&#34; $ HADOOP_HOME&#34; =&#34;&#34;];然后   HADOOP_HOME = $(cygpath -w&#34; $ HADOOP_HOME&#34;) 网络

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

答案 3 :(得分:0)

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

  

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

基于此,我将以下行添加到.zshrc(或.bashrc为您):

export HADOOP_PREFIX=`cygpath -w $HADOOP_HOME`

如果您尚未设置 $ HADOOP_HOME ,则应该。