无法在 Hadoop二进制路径中找到 winutils 二进制文件



我在启动最新Hadoop-2.2版本的namenode时收到以下错误。我没有在hadoop垃圾箱文件夹中找到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 nullbinwinutils.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)

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

(来源)

重要更新:

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

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

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

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

来源: 点击这里

如果我们直接采用Apache Hadoop 2.2.0版本的二进制发行版并尝试在Microsoft Windows上运行它,那么我们会遇到ERROR util。外壳:无法在 hadoop 二进制路径中找到 winutils 二进制文件。

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

因此,您需要从位于Hadoop源代码发行版内部的"BUILD.txt"文件后面的源代码构建Hadoop的Windows本机二进制发行版。您也可以按照以下帖子获取屏幕截图的分步指南

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

错误实用程序。Shell:无法在 hadoop二进制路径中找到 winutils 二进制文件

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

步骤如下:

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

  2. 现在,在 C:\ 中创建一个文件夹 'winutils'驾驶。现在在文件夹"winutils"内创建一个文件夹"bin",并将 winutils.exe复制到该文件夹中。所以winutils.exe的位置将是C:\winutils\bin\winutils.exe

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

您的问题必须解决!

语句java.io.IOException: 无法找到可执行文件 null\bin\winutils.exe

说明在扩展或替换环境变量时收到空值。如果您在通用包的 Shell.Java 中看到源代码,您会发现HADOOP_HOME变量未被设置,并且您收到 null 代替它,因此出现错误。

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

希望这有帮助。

谢谢卡姆莱什瓦尔。

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

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

变量:HADOOP_HOME

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

你可以

在这里下载winutils.exe:http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe

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

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

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

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

我面临着同样的问题。从HADOOP_HOME路径中删除bin为我解决了这个问题。HADOOP_HOME变量的路径应如下所示。

C:devhadoop2.6

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

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

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

如果您在计算机上具有管理员权限。

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

  2. HADOOP_HOME设置为C:winutils

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

  1. bin目录放入C:UsersvryabtseAppDataLocalProgramswinutils或类似的用户目录中。
  2. HADOOP_HOME值设置到此目录的路径中。

在窗口中设置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");
}

从此链接下载所需版本的 hadoop文件夹(假设您要在 Windows 上安装 spark,那么 hadoop 版本就是为您的 Spark 构建的)。

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

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

打开"新命令提示符"并尝试重新运行命令。

  1. 下载 [winutils.exe]
    从网址 :
    https://github.com/steveloughran/winutils/hadoop- version/箱
  2. 在HADOOP_HOME/垃圾箱下过去
    注意:您应该设置环境变量:
    用户变量:
    变量:HADOOP_HOME
    :Hadoop 或 Spark dir

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

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

  • 从链接下载hadoop-common-2.2.0-bin-master。
  • 在环境变量中创建一个用户变量HADOOP_HOME,并将 hadoop-common bin 目录的路径分配为值。
  • 您可以通过在cmd中运行Hadoop来验证它。
  • 重新启动 IDE 并运行它。

我最近在 Intellij Idea 上运行 Spark 应用程序时收到相同的错误消息。我所做的是,我下载了与我正在运行的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.7bin 目录中,因此它将在运行时找到该文件。

因此,通过设置 HADOOP_HOME,null 将是HADOOP_HOME目录。完整的路径将P:spark-2.4.7-bin-hadoop2.7binwinutils.exe我就是这样解决的

最新更新