【问题标题】:Error Hadoop on Windows via Cygwin: Could Not Locate null\bin\winutils.exe通过 Cygwin 在 Windows 上出现错误 Hadoop:无法找到 null\bin\winutils.exe
【发布时间】:2015-02-02 19:19:36
【问题描述】:

当我设置 HADOOP_HOME=/cygdrive/c/ecosystem/hadoop-2.5.1 然后尝试运行 bin/hadoop fsbin/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,如果 Cygwin 有任何方法可以设置 hadoop-config 或其他文件来查找 Windows 样式路径路径失败或为空?在 hadoop-config 中可能是这样的:

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

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

【问题讨论】:

  • 您使用 cygmin 的任何原因? Hadoop2 可在 Windows 上使用(参见wiki.apache.org/hadoop/Hadoop2OnWindows
  • Hadoop 单独在 windows 命令下运行良好。但是,我想测试与 hive 以及一些数据库框架的集成。由于这些框架并不是真正为 Windows 设计的,所以我想利用 cygwin。我最终只是构建了一个 linux 盒子,然后在那里构建了我的生态系统。完美运行。

标签: windows hadoop


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      您可能需要添加这些 shell 脚本 如果 ["$HADOOP_HOME" = ""];然后 HADOOP_HOME=$(cygpath -w "$HADOOP_HOME") 菲

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

      【讨论】:

      • 除非您确认答案,否则请将其发布为 cmets
      【解决方案4】:

      参考。 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,你应该设置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-04
        相关资源
        最近更新 更多