123

为最新的 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)
4

16 回答 16

102

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

来源

重要更新:

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

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

于 2014-12-10T06:45:26.993 回答
29

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

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

来源:点击这里

于 2015-10-29T20:53:46.590 回答
27

如果我们直接获取 Apache Hadoop 2.2.0 版本的二进制分发并尝试在 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”文件后面的源代码构建 hadoop 的 Windows 本机二进制分发。您也可以按照以下帖子获取带有屏幕截图的分步指南

在 Microsoft Windows 操作系统中构建、安装、配置和运行 Apache Hadoop 2.2.0

错误 util.Shell:无法在 hadoop 二进制路径中找到 winutils 二进制文件

于 2013-11-03T21:10:55.833 回答
19

语句 java.io.IOException: Could not locate executable null\bin\winutils.exe

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

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

希望这可以帮助。

谢谢,卡姆莱什瓦尔。

于 2013-11-02T09:04:00.443 回答
18

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

步骤如下:

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

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

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

你的问题必须解决!!

于 2019-04-12T21:45:55.340 回答
12

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

Eclipse->调试/运行配置->环境(选项卡)->并添加

变量:HADOOP_HOME

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

于 2015-05-27T21:02:13.280 回答
8

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

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

于 2015-08-14T06:29:31.607 回答
4

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

os.environ['HADOOP_HOME'] = "C:\\winutils"
print os.environ['HADOOP_HOME']
于 2018-09-27T16:33:18.510 回答
3

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

于 2014-10-30T11:51:13.387 回答
3

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

C:\dev\hadoop2.6\

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

于 2016-01-07T10:45:47.117 回答
2

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

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

现在创建环境变量 HADOOP_HOME并将其设置为<path-to-hadoop-folder>\hadoop. 然后添加 ;%HADOOP_HOME%\bin;PATH环境变量。

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

于 2018-03-21T09:34:54.530 回答
2

由于这里的大多数答案都指的是相当旧的 winutils 版本,因此我将留下一个指向最全面的存储库的链接,该存储库支持所有版本的 Hadoop,包括最新版本:

https://github.com/kontext-tech/winutils (找到你的Hadoop版本对应的目录,或者试试最新的)。

如果您对您的机器具有管理员权限。

  1. bin目录放入C:\winutils
    整个路径应该是C:\winutils\bin\winutils.exe

  2. 设置HADOOP_HOMEC:\winutils

如果您没有管理员权限或想要将二进制文件放入用户空间。

  1. bin目录放入C:\Users\vryabtse\AppData\Local\Programs\winutils或类似的用户目录。
  2. HADOOP_HOME值设置为此目录的路径。
于 2021-12-29T20:37:53.990 回答
2

  1. 从 URL 下载 [winutils.exe] :
    httpsversion : //github.com/steveloughran/winutils/hadoop-/bin
  2. 在 HADOOP_HOME/bin 下过去
    注意:您应该设置环境变量:
    用户变量:
    变量:HADOOP_HOME
    :Hadoop 或 spark dir
于 2018-06-22T11:57:07.653 回答
2

Set up HADOOP_HOME variable in windows to resolve the problem.

You can find answer in org/apache/hadoop/hadoop-common/2.2.0/hadoop-common-2.2.0-sources.jar!/org/apache/hadoop/util/Shell.java :

IOException from

  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 from

// 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");
}
于 2016-10-28T10:23:19.177 回答
1

我使用了“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。

于 2017-03-03T11:05:53.093 回答
1

我在 Windows 中遇到了同样的问题。我修复了它

  • 从链接下载 hadoop-common-2.2.0-bin-master 。
  • 在 Environment 变量中创建一个用户变量 HADOOP_HOME 并将 hadoop-common bin 目录的路径赋值为一个值。
  • 您可以通过在 cmd 中运行 hadoop 来验证它。
  • 重新启动 IDE 并运行它。
于 2017-09-15T06:45:51.360 回答