Fehler beim Auffinden der Winutils-Binärdatei im Hadoop-Binärpfad


108

Beim Starten von namenode für die neueste Version von hadoop-2.2 wird die folgende Fehlermeldung angezeigt. Ich habe die Datei winutils exe nicht im Ordner hadoop bin gefunden. Ich habe unten Befehle ausprobiert

$ 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)


Beim Versuch, diese Fehlermeldung loszuwerden, habe ich -Dhadoop.home.dir auf einen aussagekräftigen Wert gesetzt. Jetzt erhalte ich so etwas wie (lokaler Pfad durch Variablennamen ersetzt): Die ausführbare Datei $ {HADOOP_HOME} \ bin \ winutils.exe konnte nicht in den Hadoop-Binärdateien gefunden werden. Und raten Sie mal: Durch das Festlegen der Variablen wurde diese Binärdatei nicht angezeigt. Auch der Prioritätsfehler ist falsch, da die Anwendung anscheinend fortgesetzt wird. In meinen Augen ist das ein Fehler in Hadoop 2.2.0.
Hiran

Es gibt eine (wie heute offen) Jira für diese> Issues.apache.org/jira/browse/HADOOP-10051
René Nyffenegger

1
Es gibt einen HADOOP-11003 .
Remus Rusanu

1
Bitte akzeptieren Sie die Antwort von Prasad D. Er hat vorgefertigte Dateien zur Verwendung bereitgestellt. So vermeiden Sie Anstrengungen.
Kaushik Lele

Antworten:


96

Einfache Lösung: Laden Sie es von hier und in der$HADOOP_HOME/bin

( Quelle )

WICHTIGES UPDATE:

Für hadoop-2.6.0 können Sie Binärdateien aus dem Titus Barik-Blog >> herunterladen .

Ich musste nicht nur auf HADOOP_HOMEdas extrahierte Verzeichnis verweisen [path], sondern auch Systemeigenschaften -Djava.library.path=[path]\binzum Laden nativer Bibliotheken (DLL) bereitstellen .


Dies hilft beim Starten des HDFS, aber wenn ich versuche, eine Textdatei in das HDFS einzufügen, gibt es eine Fehlerausnahme im Thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsBy teArray (II [BI [BIILjava / lang / String; JZ) V
Kaushik Lele

Es ist teilweise ein Duplikat meiner Antwort. Sowohl Download als auch Quelle sind Links zu meinem Blog, wie in der Antwort erwähnt.
Abhijit

1
Dies scheint auch mit Hadoop 2.7.3 zu funktionieren. Oder gibt es ein Problem? 1) von der obigen Seite herunterladen. tar xfvz, das eine Hadoop 2.6-Distribution ergibt. Kopieren Sie dann bin \ winutlis.exe in das Verzeichnis 2.73 \ bin. Sofort funktioniert es. Bisher - zumindest.
RichMeister

28

Wenn Sie auf dieses Problem stoßen, wenn Sie eine in sich geschlossene lokale Anwendung mit Spark ausführen (dh nach dem Hinzufügen von spark -embly-xxx-hadoopx.xxjar oder der Maven-Abhängigkeit zum Projekt), besteht eine einfachere Lösung darin, winutils.exe (Download) einzufügen von hier ) in "C: \ winutil \ bin". Anschließend können Sie winutils.exe zum hadoop-Ausgangsverzeichnis hinzufügen, indem Sie dem Code die folgende Zeile hinzufügen:

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

Quelle: Klicken Sie hier


Für mich war es genug, um das Winutils-Zeug einzulegen hadoop/bin/bin/. Kopieren Sie einfach den binOrdner winutils in den binOrdner von hadoop . ( HADOOP_HOMEist in der env vars eingestellt)
holzkohlengrill

+1 Es gibt einen zu vielen Schrägstrich im Verzeichnispfad, daher System.setProperty("hadoop.home.dir", "c:\\winutil\\")
lasse

27

Wenn wir die Binärdistribution von Apache Hadoop 2.2.0 direkt verwenden und versuchen, sie unter Microsoft Windows auszuführen, tritt ERROR util.Shell auf: Fehler beim Auffinden der Winutils-Binärdatei im Hadoop-Binärpfad.

Die Binärdistribution von Apache Hadoop 2.2.0 enthält keine nativen Windows-Komponenten (wie winutils.exe, hadoop.dll usw.). Diese sind erforderlich (nicht optional), um Hadoop unter Windows auszuführen.

Sie müssen also die native Windows-Binärverteilung von Hadoop aus Quellcodes erstellen, die der Datei "BUILD.txt" folgen, die sich in der Quelldistribution von Hadoop befindet. Sie können auch den folgenden Beiträgen folgen, um eine schrittweise Anleitung mit Screenshot zu erhalten

Erstellen, Installieren, Konfigurieren und Ausführen von Apache Hadoop 2.2.0 unter Microsoft Windows

ERROR util.Shell: Fehler beim Auffinden der Winutils-Binärdatei im Hadoop-Binärpfad


2
Hallo Abhijit. Hast du deine eigenen Anweisungen befolgt? Hadoop wird unter Windows nicht unterstützt. Tatsächlich wird es nur auf bestimmten Versionen von Windows Server unterstützt. Das ist sehr mies von Microsoft und HortonWorks.
Javadba

2
Das war vor über zwei Jahren und damals sehr (sehr!) Wahr. Ich hatte mich erst zwei Wochen zuvor auf einer Konferenz direkt bei den Hortonworks-Ingenieuren verifiziert.
Javadba

18

Die Anweisung java.io.IOException: Die ausführbare Datei null \ bin \ winutils.exe konnte nicht gefunden werden

erklärt, dass die Null beim Erweitern oder Ersetzen einer Umgebungsvariablen empfangen wird. Wenn Sie die Quelle in Shell.Java im Common Package sehen, werden Sie feststellen, dass die Variable HADOOP_HOME nicht gesetzt wird und Sie stattdessen null und damit den Fehler erhalten.

Daher muss HADOOP_HOME für dieses oder die Eigenschaft hadoop.home.dir richtig festgelegt werden.

Hoffe das hilft.

Danke, Kamleshwar.


1
In welcher Konfigurationsdatei müssen wir die Eigenschaft hadoop.home.dir festlegen (z. B. hdfs-site.xml, core-site.xml)?
Tushar Sarde

4
System.setProperty ("hadoop.home.dir", "C: \\ winutil \\"); Referenz: stackoverflow.com/a/33610936/3110474
Himanshu Bhandari

Wenn Sie Windows verwenden, stellen Sie sicher, dass Sie doppelte Backslashes verwenden, während Sie einen Pfad als Wert schreiben.
Rishirich

12

Winutils.exe wird zum Ausführen der Shell-Befehle für SPARK verwendet. Wenn Sie den Spark ausführen müssen, ohne Hadoop zu installieren, benötigen Sie diese Datei.

Die Schritte sind wie folgt:

  1. Laden Sie die Datei winutils.exe von folgendem Speicherort für hadoop 2.7.1 herunter: https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin [HINWEIS: Wenn Sie eine separate hadoop-Version verwenden, laden Sie bitte die herunter winutils aus dem entsprechenden Hadoop-Versionsordner auf GITHUB vom oben genannten Speicherort.]

  2. Erstellen Sie nun einen Ordner 'winutils' in Laufwerk C: \. Erstellen Sie nun einen Ordner 'bin' im Ordner 'winutils' und kopieren Sie die Datei winutils.exe in diesen Ordner. Der Speicherort von winutils.exe lautet also C: \ winutils \ bin \ winutils.exe

  3. Öffnen Sie nun die Umgebungsvariable und setzen Sie HADOOP_HOME = C: \ winutils [HINWEIS: Bitte fügen Sie \ bin nicht in HADOOP_HOME hinzu und Sie müssen HADOOP_HOME nicht in Path setzen]

Ihr Problem muss gelöst werden !!


11

Ich bin gerade auf dieses Problem gestoßen, als ich mit Eclipse gearbeitet habe. In meinem Fall hatte ich die richtige Hadoop-Version heruntergeladen (hadoop-2.5.0-cdh5.3.0.tgz), extrahierte den Inhalt und legte ihn direkt in mein C-Laufwerk. Danach ging ich zu

Eclipse-> Debug / Run-Konfigurationen -> Umgebung (Registerkarte) -> und hinzugefügt

Variable: HADOOP_HOME

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



3

Verwenden Sie in Pyspark die folgenden Zeilen, um eine lokale Funkenanwendung mit Pycharm auszuführen

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

2

winutils.exe ist erforderlich, damit hadoop hadoop-bezogene Befehle ausführt. Bitte laden Sie die Zip-Datei hadoop-common-2.2.0 herunter. winutils.exe befindet sich im Ordner bin. Extrahieren Sie die Zip-Datei und kopieren Sie sie in den lokalen Ordner hadoop / bin.


2

Ich hatte das gleiche Problem. Das Entfernen des bin\Pfads aus dem Pfad HADOOP_HOME hat es für mich gelöst. Der Pfad für die Variable HADOOP_HOME sollte ungefähr so ​​aussehen.

C:\dev\hadoop2.6\

Möglicherweise ist ein Neustart des Systems erforderlich. In meinem Fall war ein Neustart der IDE ausreichend.


2

Richten Sie HADOOP_HOME Variable in Fenster , das Problem zu lösen.

Sie finden die Antwort in org/apache/hadoop/hadoop-common/2.2.0/hadoop-common-2.2.0-sources.jar!/org/apache/hadoop/util/Shell.java:

IOException von

  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 von

// 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

Ich hatte das gleiche Problem in Windows. Ich habe es behoben durch

  • Herunterladen von hadoop-common-2.2.0-bin-master vom Link .
  • Erstellen Sie eine Benutzervariable HADOOP_HOME in der Umgebungsvariablen und weisen Sie den Pfad des Verzeichnisses hadoop-common bin als Wert zu.
  • Sie können dies überprüfen, indem Sie hadoop in cmd ausführen.
  • Starten Sie die IDE neu und führen Sie sie aus.

1

Laden Sie die gewünschte Version des Hadoop-Ordners (sagen Sie, wenn Sie Spark unter Windows installieren, dann die Hadoop-Version, für die Ihr Spark erstellt wurde) von diesem Link als Zip herunter .

Extrahieren Sie die Zip-Datei in das gewünschte Verzeichnis. Sie benötigen ein Verzeichnis des Formulars hadoop\bin(erstellen Sie eine solche hadoop\binVerzeichnisstruktur explizit, wenn Sie möchten), bindas alle Dateien enthält, die im binOrdner des heruntergeladenen Hadoops enthalten sind. Dies wird neben winutil.exe viele Dateien wie hdfs.dll, hadoop.dll usw. enthalten.

Erstellen Sie nun eine UmgebungsvariableHADOOP_HOME und setzen Sie sie auf <path-to-hadoop-folder>\hadoop. Fügen Sie ;%HADOOP_HOME%\bin; dann der PATHUmgebungsvariablen hinzu.

Öffnen Sie eine "neue Eingabeaufforderung" und versuchen Sie, Ihren Befehl erneut auszuführen.


Dies funktionierte für mich und die Alternative, bei der HADOOP_HOME auf das bin-Verzeichnis zeigte (und nicht auf das übergeordnete Verzeichnis), tat dies nicht.
Philwalk

0

Ich habe die Versionen "hbase-1.3.0" und "hadoop-2.7.3" verwendet. Das Festlegen der Umgebungsvariablen HADOOP_HOME und das Kopieren der Datei 'winutils.exe' in den Ordner HADOOP_HOME / bin löst das Problem unter einem Windows-Betriebssystem. Achten Sie darauf, die HADOOP_HOME-Umgebung auf den Installationsordner von hadoop festzulegen (der Ordner / bin ist für diese Versionen nicht erforderlich). Außerdem habe ich es vorgezogen, das plattformübergreifende Tool cygwin zu verwenden, um die Linux- Betriebssystemfunktionalität (so weit wie möglich) zu regeln, da das Hbase-Team Linux / Unix-Env empfiehlt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.