未能在 hadoop 二进制路径中找到 winutils 二进制文件

Posted

技术标签:

【中文标题】未能在 hadoop 二进制路径中找到 winutils 二进制文件【英文标题】:Failed to locate the winutils binary in the hadoop binary path 【发布时间】:2013-11-06 09:21:22 【问题描述】:

为最新的 hadoop-2.2 版本启动 namenode 时出现以下错误。我没有在 hadoop bin 文件夹中找到 winutils exe 文件。我尝试了以下命令

$ bin/hdfs namenode -format
$ sbin/yarn-daemon.sh start resourcemanager

ERROR [main] util.Shell (Shell.java:getWinUtilsPath(303)) - 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:278)
    at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:300)
    at org.apache.hadoop.util.Shell.<clinit>(Shell.java:293)
    at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:76)
    at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:863)

【问题讨论】:

见***.com/questions/18630019/… 试图摆脱该错误消息,我将 -Dhadoop.home.dir 设置为有意义的值。现在我得到类似(本地路径替换为变量名):在 Hadoop 二进制文件中找不到可执行文件 $HADOOP_HOME\bin\winutils.exe。猜猜看:设置变量并没有使该二进制文件出现。优先级 ERROR 也是错误的,因为应用程序似乎仍在继续。在我看来,这是 Hadoop 2.2.0 中的一个错误。 有一个(根据今天开放的)jira 用于此>issues.apache.org/jira/browse/HADOOP-10051 有一个HADOOP-11003。 请接受Prasad D的回答。他提供了现成的文件供使用;从而避免努力。 【参考方案1】:

Winutils.exe 用于运行 SPARK 的 shell 命令。 当你需要在不安装 Hadoop 的情况下运行 Spark 时,你需要这个文件。

步骤如下:

    从以下位置为 hadoop 2.7.1 下载 winutils.exe https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin [注意:如果您使用单独的hadoop版本,请从上述位置从GITHUB上相应的hadoop版本文件夹下载winutils。]

    现在,在 C:\ 驱动器中创建一个文件夹“winutils”。现在在文件夹“winutils”中创建一个文件夹“bin”,并将 winutils.exe 复制到该文件夹​​中。 所以winutils.exe的位置会是C:\winutils\bin\winutils.exe

    现在,打开环境变量并设置 HADOOP_HOME=C:\winutils [注意:请不要在HADOOP_HOME中添加\bin,也无需在Path中设置HADOOP_HOME]

你的问题必须解决!!

【讨论】:

【参考方案2】:

简单的解决方案: 从here下载并添加到$HADOOP_HOME/bin

(Source)

重要更新:

对于 hadoop-2.6.0,您可以从 Titus Barik blog >> 下载二进制文件。

我不仅需要将HADOOP_HOME指向解压目录[path],还需要提供系统属性-Djava.library.path=[path]\bin来加载原生库(dll)。

【讨论】:

这有助于启动 hdfs,但是当我尝试将文本文件放入 hdfs 时,它在线程“main”java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32 中给出错误异常。 nativeComputeChunkedSumsBy teArray(II[BI[BIILjava/lang/String;JZ)V 我的回答部分重复。下载和来源都是答案中提到的我博客的链接。 这似乎也适用于 Hadoop 2.7.3。或者会不会有问题? 1)从上面的页面下载。 tar xfvz,它提供了 Hadoop 2.6 发行版。然后将bin\winutlis.exe复制到2.73\bin目录下。瞬间,它起作用了。到目前为止 - 至少。【参考方案3】:

在 Pyspark 中,要使用 Pycharm 运行本地 spark 应用程序,请使用以下行

os.environ['HADOOP_HOME'] = "C:\\winutils"
print os.environ['HADOOP_HOME']

【讨论】:

【参考方案4】:
    下载 [winutils.exe] 从网址: https://github.com/steveloughran/winutils/hadoop-version/bin 在 HADOOP_HOME/bin 下过去 注意:您应该设置环境变量: 用户变量: 变量:HADOOP_HOME 价值:Hadoop 或 spark 目录

【讨论】:

【参考方案5】:

从this 链接下载所需版本的hadoop 文件夹(例如,如果您在Windows 上安装spark,则为您的spark 构建的hadoop 版本)作为zip 链接。

将 zip 解压到所需目录。 您需要具有hadoop\bin 形式的目录(如果需要,可以显式创建此类hadoop\bin 目录结构),其中bin 包含下载的hadoop 的bin 文件夹中包含的所有文件。这将包含许多文件,如 hdfs.dll、hadoop.dll 等,除了 winutil.exe。

现在 create environment variable HADOOP_HOME 并将其设置为 &lt;path-to-hadoop-folder&gt;\hadoop。然后add;%HADOOP_HOME%\bin;PATH 环境变量。

打开“新命令提示符”并尝试重新运行您的命令。

【讨论】:

这对我有用,而 HADOOP_HOME 指向 bin 目录(而不是它的父目录)的替代方法没有。【参考方案6】:

我在 Windows 中遇到了同样的问题。我通过

修复了它 从link下载hadoop-common-2.2.0-bin-master。 在Environment variable中创建用户变量HADOOP_HOME,并将hadoop-common bin目录的路径赋值为。 您可以通过在cmd中运行hadoop来验证它。 重新启动 IDE 并运行它。

【讨论】:

【参考方案7】:

我使用了“hbase-1.3.0”和“hadoop-2.7.3”版本。设置 HADOOP_HOME 环境变量并在 HADOOP_HOME/bin 文件夹下复制“winutils.exe”文件可以解决 Windows 操作系统上的问题。 注意将HADOOP_HOME环境设置为hadoop的安装文件夹(这些版本不需要/bin文件夹)。 此外,我更喜欢使用跨平台工具cygwin 来解决 linux os 功能(尽可能),因为 Hbase 团队推荐 linux/unix env。

【讨论】:

【参考方案8】:

在windows中设置HADOOP_HOME变量来解决问题。

你可以在org/apache/hadoop/hadoop-common/2.2.0/hadoop-common-2.2.0-sources.jar!/org/apache/hadoop/util/Shell.java找到答案:

来自

的IOException
  public static final String getQualifiedBinPath(String executable) 
  throws IOException 
    // construct hadoop bin path to the specified executable
    String fullExeName = HADOOP_HOME_DIR + File.separator + "bin" 
      + File.separator + executable;
    File exeFile = new File(fullExeName);
    if (!exeFile.exists()) 
      throw new IOException("Could not locate executable " + fullExeName
        + " in the Hadoop binaries.");
    
    return exeFile.getCanonicalPath();
  

来自

的HADOOP_HOME_DIR
// first check the Dflag hadoop.home.dir with JVM scope
String home = System.getProperty("hadoop.home.dir");
// fall back to the system/user-global env variable
if (home == null) 
  home = System.getenv("HADOOP_HOME");

【讨论】:

【参考方案9】:

如果您在使用 Spark 运行自包含本地应用程序时遇到此问题(即,在项目中添加 spark-assembly-xxx-hadoopx.xxjar 或 Maven 依赖项后),更简单的解决方案是将 winutils .exe(从here 下载)在“C:\winutil\bin”中。然后你可以通过在代码中添加以下行来将 winutils.exe 添加到 hadoop 主目录:

System.setProperty("hadoop.home.dir", "c:\\\winutil\\\")

来源:点击here

【讨论】:

对我来说,将 winutils 的东西放在hadoop/bin/bin/ 就足够了。所以只需将 winutils bin 文件夹复制到 hadoop 的 bin 文件夹中。 (HADOOP_HOME 在环境变量中设置) +1 目录路径中的斜杠太多了,所以我自己留在这里:System.setProperty("hadoop.home.dir", "c:\\winutil\\")【参考方案10】:

我也遇到了同样的问题。从 HADOOP_HOME 路径中删除 bin\ 为我解决了这个问题。 HADOOP_HOME 变量的路径应该类似于。

C:\dev\hadoop2.6\

可能需要重新启动系统。就我而言,重启 IDE 就足够了。

【讨论】:

谢谢@Asmat Ali,重新启动 IDE 是我缺少的部分。【参考方案11】:

您可以在此处下载 winutils.exe: http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe

然后将其复制到您的HADOOP_HOME/bin 目录。

【讨论】:

【参考方案12】:

我在使用 Eclipse 时遇到了这个问题。就我而言,我下载了正确的 Hadoop 版本(hadoop-2.5.0-cdh5.3.0.tgz),我提取了内容并将其直接放在我的 C 驱动器中。然后我去了

Eclipse->Debug/Run Configurations -> Environment (tab) -> 并添加

变量:HADOOP_HOME

值:C:\hadoop-2.5.0-cdh5.3.0

【讨论】:

【参考方案13】:

hadoop 需要 winutils.exe 才能执行 hadoop 相关命令。请下载 hadoop-common-2.2.0 压缩文件。 winutils.exe 可以在 bin 文件夹中找到。解压 zip 文件并将其复制到本地 hadoop/bin 文件夹中。

【讨论】:

【参考方案14】:

如果我们直接拿 Apache Hadoop 2.2.0 release 的二进制发行版并尝试在 Microsoft Windows 上运行它,那么我们会遇到 ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path。

Apache Hadoop 2.2.0 版本的二进制分发不包含一些 Windows 原生组件(如 winutils.exe、hadoop.dll 等)。这些是在 Windows 上运行 Hadoop 所必需的(不是可选的)。

因此,您需要从位于 hadoop 源代码分发中的“BUILD.txt”文件之后的源代码构建 Windows 本机二进制分发文件。您也可以按照以下帖子获取屏幕截图的分步指南

Build, Install, Configure and Run Apache Hadoop 2.2.0 in Microsoft Windows OS

ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path

【讨论】:

嗨阿比吉特。你有没有听从自己的指示? Windows 不支持 Hadoop。实际上它仅在某些版本的 Windows Server 上受支持。这对微软和 HortonWorks 来说非常糟糕。 那是两年多以前的事了,当时非常(非常!)正确。就在两周前,我在一次会议上直接与 Hortonworks 工程师进行了验证。【参考方案15】:

声明 java.io.IOException: 找不到可执行文件 null\bin\winutils.exe

说明在扩展或替换环境变量时收到 null。如果您在 Common Package 中的 Shell.Java 中看到 Source,您会发现 HADOOP_HOME 变量未设置,并且您收到 null 代替它,因此出现错误。

因此,需要为此正确设置 HADOOP_HOME 或变量 hadoop.home.dir 属性。

希望这会有所帮助。

谢谢, 卡姆莱什瓦。

【讨论】:

我们需要在哪个配置文件上设置 hadoop.home.dir 属性(例如 hdfs-site.xml, core-site.xml )? System.setProperty("hadoop.home.dir", "C:\\winutil\\");参考:***.com/a/33610936/3110474 如果您使用的是 Windows,请确保在将任何路径作为值写入时使用双反斜杠。

以上是关于未能在 hadoop 二进制路径中找到 winutils 二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

“未能找到 winutils 二进制文件”但我的 pyspark 仍然有效

未能找到路径“\bin\roslyn\csc.exe”的一部分 的解决办法

网站发布出现“未能找到路径“pathin oslyncsc.exe”....“和拒绝访问的解决办法

在“安装”阶段发生异常。 System.Security.SecurityException: 未找到源,但未能

查看Hadoop安装路径

未能找到tempselect2.cur的一部分