通过cygwin在windows上执行hadoop时出错:找不到null\bin\winutils.exe

pqwbnv8z  于 2021-06-02  发布在  Hadoop
关注(0)|答案(4)|浏览(382)

当我设置hadoop\u home=/cygdrive/c/ecosystem/hadoop-2.5.1,然后尝试从cygwin运行bin/hadoop fs或bin/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样式的路径,这样它就可以符合\bin\winutils样式。所以,我设置hadoop\u home=c:\ecosystem\hadoop-2.5.1,这个错误就消失了。但是,现在我在cygwin中运行时收到一个链接错误。我通过windows命令用hadoop\u home=c:\ecosystem\hadoop-2.5.1测试了hadoop,我可以毫无问题地运行mapreduce作业。
我想在cygwin中成功运行hadoop,我不想处理链接错误。如果我保持hadoop\u home=/cygdrive/c/ecosystem/hadoop-2.5.1,如果cygwin路径失败或为空,有没有办法设置hadoop config或其他文件来查找windows样式的路径?可能在hadoop配置中有类似的内容:

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

很明显,这段代码在hadoop配置中不起作用,但我想您会明白其中的大意。任何帮助都将不胜感激。

1u4esq0p

1u4esq0p1#

当我试图在windows中本地执行hadoop mr程序时,通过eclipse:run->run configurations->environment设置环境变量hadoop\u home,我解决了eclipse的一个类似错误。

fwzugrvs

fwzugrvs2#

尝试在调用java命令的地方编辑hadoop/hdfs/yarn shell脚本add-dhadoop.home.dir=right。
如果[“$hadoop_home”=”“],您可能需要添加这些shell脚本;然后hadoop\u home=$(cygpath-w“$hadoop\u home”)fi
最坏的情况是,您已经有src access编辑它编译它并在那里设置home变量编译它并将它添加到jar。

nfg76nw0

nfg76nw03#

因为我能够通过windows命令成功地使用hadoop,所以浪费时间试图弄清楚如何让它与cygwin一起工作没有多大意义。相反,对于我更强大的hadoop生态系统,我只是在linux上构建它。它非常容易使用,是迄今为止我做的最好的决定。

guz6ccqo

guz6ccqo4#

裁判。https://issues.apache.org/jira/browse/hadoop-10133
hadoop\u opts=“$hadoop\u opts-dhadoop.home.dir=”$(cygpath-pw“$hadoop\u prefix”)“”
基于此,我在我的 .zshrc (或 .bashrc 为您):

export HADOOP_PREFIX=`cygpath -w $HADOOP_HOME`

如果您还没有将$hadoop\u设置为home,您应该这样做。

相关问题