在 hadoop 二进制路径中找不到 winutils 二进制

在最新 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)
232912 次浏览

The statement java.io.IOException: Could not locate executable null\bin\winutils.exe

解释在展开或替换环境变量时会接收到 null。如果您在 Shell 中看到 Source。Java 在 Common Package 中你会发现 HADOOP _ HOME 变量没有被设置,你接收到 null 来代替它,因此出现了错误。

因此,需要正确地设置 HADOOP _ HOME 或变量 HADOOP.home.dir 属性。

希望这个能帮上忙。

谢谢, Kamleshwar.

如果我们直接使用 Apache Hadoop 2.2.0发行版的二进制发行版,并尝试在 Microsoft Windows 上运行它,那么我们将遇到 ERROR util。Shell: 在 hadoop 二进制路径中找不到 winutils 二进制文件。

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

因此,你需要建立本地二进制分发的 hadoop 从源代码后面的“ BUILD.txt”文件位于 hadoop 的源分发内。您可以按照以下职位以及一步一步的指导与屏幕截图

在 Microsoft Windows OS 中构建、安装、配置和运行 Apache Hadoop 2.2.0

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

Hadoop 需要 winutils.exe 来执行 hadoop 相关的命令,请下载 Hadoop-common-2.2.0 zip 文件。Exe 可以在 bin 文件夹中找到。提取 zip 文件并将其复制到本地 hadoop/bin 文件夹中。

简单的解决方法: 从 给你下载并添加到 $HADOOP_HOME/bin

(来源)

重要更新:

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

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

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

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

Variable: HADOOP _ HOME 变量: HADOOP _ HOME

值: hadoop-2.5.0-cdh5.3.0

你可以在这里下载 winutils.exe: Http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe

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

如果在使用 Spark 运行一个自包含的本地应用程序时遇到这个问题(即,在向项目中添加 park-Assembly-x.x.x-hadoopx.x.x.jar 或 Maven 依赖项之后) ,一个更简单的解决方案是将 winutils.exe (从 给你下载)放到“ C: winutil bin”中。然后,通过在代码中添加以下代码行,可以将 winutils.exe 添加到 hadoop 主目录:

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

来源: 单击 给你

I was facing the same problem. Removing the bin\ from the HADOOP_HOME path solved it for me. The path for HADOOP_HOME variable should look something like.

C:\dev\hadoop2.6\

可能需要重新启动系统。在我的例子中,重新启动 IDE 就足够了。

在窗口中设置 HADOOP _ Home变量以解决问题。

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 :

来自

  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");
}

I used "hbase-1.3.0" and "hadoop-2.7.3" versions. Setting HADOOP_HOME environment variable and copying 'winutils.exe' file under HADOOP_HOME/bin folder solves the problem on a windows os. 注意将 HADOOP _ HOME 环境设置为 HADOOP 的安装文件夹(这些版本不需要/bin 文件夹)。 此外,我更喜欢使用跨平台工具 cygwin来解决 linux os 功能(尽可能) ,因为 Hbase 团队推荐 linux/unix env。

我在窗户上也遇到了同样的问题,我把它修好了

  • 链接下载 hadoop-common-2.2.0-bin-master。
  • 在环境变量中创建一个用户变量 HADOOP _ HOME,并将 HADOOP-common bin 目录的路径赋值。
  • You can verify it by running hadoop in cmd.
  • 重新启动 IDE 并运行它。

这个链接下载所需的 hadoop 文件夹版本(比如说,如果你正在 Windows 上安装火花,那么你的火花就是用来安装 hadoop 版本的)。

Extract the zip to desired directory. 您需要具有表单 hadoop\bin的目录(如果需要,可以显式创建这样的 hadoop\bin目录结构) ,其中 bin包含下载 hadoop 的 bin文件夹中包含的所有文件。除了 winutil.exe 之外,这将包含许多文件,如 hdfs.dll、 hadoop.dll 等。

Now 创造环境变量 HADOOP_HOME and set it to <path-to-hadoop-folder>\hadoop. Then ;%HADOOP_HOME%\bin; to PATH environment variable.

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

  1. 下载[ winutils.exe ]
    网址:
    Https://github.com/steveloughran/winutils/hadoop- version/bin
  2. 在 HADOOP _ HOME/bin 下通过它
    注意: 您应该设置环境变量:
    用户变量:
    Variable: HADOOP_HOME
    : Hadoop 或火花 dir

在 Pyspark,要使用 Pycharm 运行本地火花应用程序,请使用下面几行代码

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

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

步骤如下:

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

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

  3. 现在,打开环境变量并设置 HADOOP _ HOME = C: winutils [NOTE: Please do not add \bin in HADOOP _ Home and no need to set HADOOP_HOME in Path]

你的问题必须解决! !

由于这里的大多数答案都涉及到 winutils 的老版本,我将留下一个链接到最全面的仓库,它支持所有版本的 Hadoop,包括最新的版本:

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

如果您对计算机有管理权限。

  1. Put bin directory into C:\winutils
    整个路径应该是 C:\winutils\bin\winutils.exe

  2. Set HADOOP_HOME into C:\winutils

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

  1. bin目录放入 C:\Users\vryabtse\AppData\Local\Programs\winutils或类似的用户目录。
  2. HADOOP_HOME值设置为此目录的路径。

我最近在 Intellij Ideas 上运行火花应用程序时收到了相同的错误消息。我所做的是,下载了与我正在运行的 Spark 版本兼容的 winutils.exe,并将其移动到 Spark bin 目录。然后在我的 Intellij 中,我编辑了配置。

“环境变量”区域是空的。因此,我输入了 HADOOP_HOME = P:\spark-2.4.7-bin-hadoop2.7 因为 winutils.exe 在 P:\spark-2.4.7-bin-hadoop2.7\bin目录中,所以它会在运行时找到文件。

因此,通过设置 HADOOP _ HOME,null 将是 HADOOP _ HOME 目录 我就是这么解决的