【发布时间】:2015-02-02 19:19:36
【问题描述】:
当我设置 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,如果 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 盒子,然后在那里构建了我的生态系统。完美运行。