java.io.IOException: Die ausführbare Datei null \ bin \ winutils.exe konnte in den Hadoop-Binärdateien nicht gefunden werden. Funkenfinsternis unter Windows 7

91

Ich kann keinen einfachen sparkJob in Scala IDE(Maven Spark-Projekt) ausführen, auf dem installiert istWindows 7

Die Spark-Core-Abhängigkeit wurde hinzugefügt.

val conf = new SparkConf().setAppName("DemoDF").setMaster("local")
val sc = new SparkContext(conf)
val logData = sc.textFile("File.txt")
logData.count()

Error:

16/02/26 18:29:33 INFO SparkContext: Created broadcast 0 from textFile at FrameDemo.scala:13
16/02/26 18:29:34 ERROR Shell: 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.mapred.FileInputFormat.setInputPaths(FileInputFormat.java:362)
    at <br>org.apache.spark.SparkContext$$anonfun$hadoopFile$1$$anonfun$33.apply(SparkContext.scala:1015)
    at org.apache.spark.SparkContext$$anonfun$hadoopFile$1$$anonfun$33.apply(SparkContext.scala:1015)
    at <br>org.apache.spark.rdd.HadoopRDD$$anonfun$getJobConf$6.apply(HadoopRDD.scala:176)
    at <br>org.apache.spark.rdd.HadoopRDD$$anonfun$getJobConf$6.apply(HadoopRDD.scala:176)<br>
    at scala.Option.map(Option.scala:145)<br>
    at org.apache.spark.rdd.HadoopRDD.getJobConf(HadoopRDD.scala:176)<br>
    at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:195)<br>
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:239)<br>
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:237)<br>
    at scala.Option.getOrElse(Option.scala:120)<br>
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:237)<br>
    at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:35)<br>
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:239)<br>
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:237)<br>
    at scala.Option.getOrElse(Option.scala:120)<br>
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:237)<br>
    at org.apache.spark.SparkContext.runJob(SparkContext.scala:1929)<br>
    at org.apache.spark.rdd.RDD.count(RDD.scala:1143)<br>
    at com.org.SparkDF.FrameDemo$.main(FrameDemo.scala:14)<br>
    at com.org.SparkDF.FrameDemo.main(FrameDemo.scala)<br>
Elvish_Blade
quelle

Antworten:

137

Hier finden Sie eine gute Erklärung Ihres Problems mit der Lösung.

  1. Laden Sie winutils.exe von http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe herunter .
  2. Stellen Sie Ihre Umgebungsvariable HADOOP_HOME auf Betriebssystemebene oder programmgesteuert ein:

    System.setProperty ("hadoop.home.dir", "vollständiger Pfad zum Ordner mit winutils");

  3. Genießen

Taky
quelle
13
Ich muss HADOOP_HOME auf den Ordner hadoop anstatt auf den Ordner bin setzen.
Stanley
4
Stellen Sie außerdem sicher, dass Sie die richtige winutils.exe herunterladen, die auf der Version von hadoop basiert, für die spark kompiliert wurde (also nicht unbedingt den obigen Link). Ansonsten wartet Schmerz :)
NP3
System.setProperty ("hadoop.home.dir", "C: \\ hadoop-2.7.1 \\")
Shyam Gupta
1
ja genau wie @Stanley sagt. arbeitete mit dem Einrichten des Ordners HADOOP_HOME to hadoop anstelle des Ordners bin.
Jazz
@ NP3 und woher kennst du diese Version? Ich benutze den neuesten Pyspark. Vielen Dank,
JDPeckham
64
  1. Laden Sie winutils.exe herunter
  2. Erstellen Sie beispielsweise einen Ordner C:\winutils\bin
  3. Kopieren Sie nach winutils.exeinnenC:\winutils\bin
  4. Setzen Sie die Umgebungsvariable HADOOP_HOMEaufC:\winutils
Deokant Gupta
quelle
Wenn Sie eine Cmd-Zeile geöffnet haben, starten Sie sie neu, damit die Variablen wirksam werden.
Eych
25

Folge dies:

  1. Erstellen Sie einen binOrdner in einem beliebigen Verzeichnis (zur Verwendung in Schritt 3).

  2. Laden Sie winutils.exe herunter und legen Sie es im bin-Verzeichnis ab.

  3. Fügen Sie nun System.setProperty("hadoop.home.dir", "PATH/TO/THE/DIR");Ihren Code hinzu.

Ani Menon
quelle
2
Vielen Dank, genau das, wonach ich gesucht habe
user373201
3
Es ist zu beachten, dass der Pfad, auf den verwiesen werden soll, nicht das Verzeichnis 'bin' enthalten sollte. Beispiel: Wenn der Pfad, in dem winutils.exe "D: //Hadoop//bin//winutils.exe" ist, der Pfad für hadoop.home.dir "D: // Hadoop"
Keshav Pradeep Ramanath
4

wenn wir unten Problem sehen

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

java.io.IOException: Die ausführbare Datei null \ bin \ winutils.exe konnte in den Hadoop-Binärdateien nicht gefunden werden.

Führen Sie dann die folgenden Schritte aus

  1. Laden Sie winutils.exe von http://public-repo-1.hortonworks.com/hdp- win-alpha / winutils.exe herunter.
  2. Bewahren Sie dies im Ordner bin eines Ordners auf, den Sie für.eg C: \ Hadoop \ bin erstellt haben
  3. und fügen Sie im Programm die folgende Zeile hinzu, bevor Sie SparkContext oder SparkConf System.setProperty erstellen ("hadoop.home.dir", "C: \ Hadoop");
Prem S.
quelle
4
1) Download winutils.exe from https://github.com/steveloughran/winutils 
2) Create a directory In windows "C:\winutils\bin
3) Copy the winutils.exe inside the above bib folder .
4) Set the environmental property in the code 
  System.setProperty("hadoop.home.dir", "file:///C:/winutils/");
5) Create a folder "file:///C:/temp" and give 777 permissions.
6) Add config property in spark Session ".config("spark.sql.warehouse.dir", "file:///C:/temp")"
Sampat Kumar
quelle
3

Unter Windows 10 sollten Sie zwei verschiedene Argumente hinzufügen.

(1) Fügen Sie die neue Variable und den neuen Wert als - HADOOP_HOME und Pfad (dh c: \ Hadoop) unter Systemvariablen hinzu.

(2) Neuen Eintrag zur Variablen "Pfad" als "C: \ Hadoop \ bin" hinzufügen / anhängen.

Das obige hat bei mir funktioniert.

user1023627
quelle
2

Ich habe das gleiche Problem beim Ausführen von Unit-Tests. Ich habe diese Problemumgehungslösung gefunden:

Mit der folgenden Problemumgehung können Sie diese Meldung entfernen:

    File workaround = new File(".");
    System.getProperties().put("hadoop.home.dir", workaround.getAbsolutePath());
    new File("./bin").mkdirs();
    new File("./bin/winutils.exe").createNewFile();

von: https://issues.cloudera.org/browse/DISTRO-544

Joabe Lucena
quelle
2

Sie können alternativ winutils.exevon GITHub herunterladen :

https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin

Ersetzen hadoop-2.7.1Sie sie durch die gewünschte Version und platzieren Sie die Datei inD:\hadoop\bin

Wenn Sie keine Zugriffsrechte auf die Einstellungen der Umgebungsvariablen auf Ihrem Computer haben, fügen Sie einfach die folgende Zeile zu Ihrem Code hinzu:

System.setProperty("hadoop.home.dir", "D:\\hadoop");
Saurabh
quelle
1

Das Festlegen der Umgebungsvariablen Hadoop_Home in den Systemeigenschaften hat bei mir nicht funktioniert. Aber das tat:

  • Legen Sie das Hadoop_Home auf der Registerkarte Eclipse Run Configurations fest.
  • Folgen Sie von hier aus dem 'Windows Environment Setup'
Ramya
quelle
0

Neben der Erwähnung Ihrer Umgebungsvariablen für HADOOP_HOMEin Windows as C:\winutilsmüssen Sie auch sicherstellen, dass Sie der Administrator des Computers sind. Wenn dies nicht der USERFall ist und Sie durch Hinzufügen von Umgebungsvariablen zur Eingabe von Administratoranmeldeinformationen (auch unter Variablen) aufgefordert werden, sind diese Variablen anwendbar, sobald Sie Ihre Eingabeaufforderung als Administrator starten.

Abhishek Sakhuja
quelle
0

Ich habe das ähnliche Problem auch mit den folgenden Details konfrontiert: Java 1.8.0_121, Spark spark-1.6.1-bin-hadoop2.6, Windows 10 und Eclipse Oxygen. Als ich meine WordCount.java in Eclipse mit HADOOP_HOME als Systemvariable ausführte Wie im vorherigen Beitrag erwähnt, hat es nicht funktioniert. Was für mich funktioniert hat ist -

System.setProperty ("hadoop.home.dir", "PATH / TO / THE / DIR");

PATH / TO / THE / DIR / bin = winutils.exe, unabhängig davon, ob Sie in Eclipse als Java-Anwendung oder per Spark-Submit von cmd mit ausgeführt werden

spark-submit --class groupid.artifactid.classname --master local [2] / Pfad zur JAR-Datei, die mit maven erstellt wurde / Pfad zu einer Demo-Testdatei / Pfad zum Ausgabeverzeichnisbefehl

Beispiel: Gehen Sie zum Bin-Speicherort von Spark / home / location / bin und führen Sie den Spark-Submit wie erwähnt aus.

D: \ BigData \ spark-2.3.0-bin-hadoop2.7 \ bin> spark-submit --class com.bigdata.abdus.sparkdemo.WordCount --master local [1] D: \ BigData \ spark-quickstart \ Ziel \ spark-quickstart-0.0.1-SNAPSHOT.jar D: \ BigData \ spark-quickstart \ wordcount.txt

Abdus Mondal
quelle
0

Das ist eine knifflige Angelegenheit ... Ihr Aufbewahrungsbrief muss launisch sein. Zum Beispiel " C : \ ..."

Achilles
quelle