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


108

启动最新的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)


为了摆脱该错误消息,我将-Dhadoop.home.dir设置为有意义的值。现在,我得到了类似的内容(用变量名替换了本地路径):在Hadoop二进制文件中找不到可执行文件$ {HADOOP_HOME} \ bin \ winutils.exe。想一想:设置变量不会使该二进制文件出现。此外,由于应用程序似乎继续,优先级ERROR错误。在我看来,这是Hadoop 2.2.0中的错误。
Hiran 2013年

有一个(按今天开)JIRA这个> issues.apache.org/jira/browse/HADOOP-10051
勒内Nyffenegger


1
请接受Prasad D给出的答案。他提供了现成的文件供使用;从而避免了努力。
Kaushik Lele

Answers:


96

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

来源

重要更新:

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

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


这有助于启动hdfs,但是当我尝试将文本文件放入hdfs时,它将在线程“ main”中给出错误Exception。java.lang.UnsatisfiedLinkError:org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsBy teArray(II [BI [BI [BIILjava / lang / String; JZ)V
Kaushik Lele

它部分重复了我的答案。如答案中所述,下载和源代码都是我的博客的链接。
阿披吉特(Abhijit)

1
这似乎也适用于Hadoop 2.7.3。还是会有问题?1)从上面的页面下载。tar xfvz,提供了Hadoop 2.6发行版。然后将bin \ winutlis.exe复制到2.73 \ bin目录。即刻生效。到目前为止-至少。
RichMeister

28

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

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

来源:点击这里


对我来说,将winutils放入其中就足够了hadoop/bin/bin/。因此,只需将winutils bin文件夹复制到hadoop的bin文件夹中即可。(HADOOP_HOME在环境变量中设置)
holzkohlengrill

+1目录路径中的斜杠太多,因此我将其留给自己:System.setProperty("hadoop.home.dir", "c:\\winutil\\")
整理

27

如果我们直接采用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的Windows本机二进制分发。您也可以按照以下帖子获取有关屏幕截图的逐步指导

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

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


2
嗨,阿比吉特。您遵循自己的指示了吗?Windows不支持Hadoop。实际上,仅某些版本的Windows Server支持。对于Microsoft和HortonWorks来说,这太糟糕了。
javadba 2014年

2
那是两年多以前的事了,当时非常(非常!)。我在一次会议前两周就直接与Hortonworks工程师进行了验证。
javadba

18

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

解释了在扩展或替换环境变量时会收到null。如果在Common Package的Shell.Java中看到Source,则会发现HADOOP_HOME变量未设置,并且您收到的是null而不是它,因此发生错误。

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

希望这可以帮助。

谢谢,Kamleshwar。


1
我们需要在哪个配置文件上设置hadoop.home.dir属性(例如hdfs-site.xml,core-site.xml)?
Tushar Sarde 2014年

4
System.setProperty(“ hadoop.home.dir”,“ C:\\ winutil \\”); 参考:stackoverflow.com/a/33610936/3110474
Himanshu Bhandari

如果您使用的是Windows,请确保在将任何路径写入值时都使用双反斜杠。
rishirich

12

Winutils.exe用于运行SPARK的Shell命令。需要在不安装Hadoop的情况下运行Spark时,需要此文件。

步骤如下:

  1. 从以下位置下载winutils.exe for hadoop 2.7.1 https://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,也不需要在Path中设置HADOOP_HOME。

您的问题必须解决!


11

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

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

变量:HADOOP_HOME

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



3

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

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

2

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


2

我面临着同样的问题。bin\从HADOOP_HOME路径中删除,对我来说解决了。HADOOP_HOME变量的路径应类似于。

C:\dev\hadoop2.6\

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


2

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


1

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

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

1

下载所需的文件夹的Hadoop版本(说,如果你在Windows上安装的火花,然后针对你的火花为内置的Hadoop版本)从链接为拉链。

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

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

打开“新命令提示符”,然后尝试重新运行命令。


这对我有用,而HADOOP_HOME指向bin目录(而不是其父目录)的替代方法却没有。
philwalk

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.