java.io.IOException: nie można zlokalizować pliku wykonywalnego null \ bin \ winutils.exe w plikach binarnych Hadoop. Spark Eclipse w systemie Windows 7


92

Nie mogę uruchomić prostego sparkzadania w Scala IDE(projekcie Maven Spark) zainstalowanym naWindows 7

Dodano zależność Spark Core.

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

Błąd:

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>

Odpowiedzi:


142

Oto dobre wyjaśnienie problemu z rozwiązaniem.

  1. Pobierz winutils.exe z http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe .
  2. Ustaw zmienną środowiskową HADOOP_HOME na poziomie systemu operacyjnego lub programowo:

    System.setProperty ("hadoop.home.dir", "pełna ścieżka do folderu z winutils");

  3. Cieszyć się


14
Muszę ustawić HADOOP_HOME na folder hadoop zamiast folderu bin.
Stanley

4
Upewnij się również, że pobierasz poprawny plik winutils.exe w oparciu o wersję hadoopa, dla której skompilowano Spark (więc niekoniecznie powyższy link). W przeciwnym razie ból czeka :)
NP3

System.setProperty ("hadoop.home.dir", "C: \\ hadoop-2.7.1 \\")
Shyam Gupta,

1
tak, dokładnie tak, jak mówi @Stanley. pracował z ustawieniem HADOOP_HOME do folderu hadoop zamiast folderu bin.
Jazz

@ NP3 i skąd znasz tę wersję? Używam najnowszego pysparka. Dzięki,
JDPeckham

66
  1. Pobierz plik winutils.exe
  2. Powiedzmy, utwórz folder C:\winutils\bin
  3. Skopiuj w winutils.exeśrodkuC:\winutils\bin
  4. Ustaw zmienną środowiskową HADOOP_HOMEnaC:\winutils

także, jeśli masz otwartą linię cmd, zrestartuj ją, aby zmienne zaczęły działać.
eych

26

Obserwuj to:

  1. Utwórz binfolder w dowolnym katalogu (do użycia w kroku 3).

  2. Pobierz winutils.exe i umieść go w katalogu bin.

  3. Teraz dodaj System.setProperty("hadoop.home.dir", "PATH/TO/THE/DIR");swój kod.


2

3
Należy zauważyć, że wskazana ścieżka nie powinna zawierać katalogu „bin”. Na przykład: jeśli ścieżka, w której winutils.exe to „D: //Hadoop//bin//winutils.exe”, to ścieżka do hadoop.home.dir powinna mieć postać „D: // Hadoop”
Keshav Pradeep Ramanath

4

jeśli widzimy poniżej problem

BŁĄD Shell: nie udało się zlokalizować pliku binarnego winutils w ścieżce binarnej Hadoop

java.io.IOException: nie można zlokalizować pliku wykonywalnego null \ bin \ winutils.exe w plikach binarnych Hadoop.

następnie wykonaj następujące czynności

  1. pobierz plik winutils.exe z http://public-repo-1.hortonworks.com/hdp- win-alpha / winutils.exe.
  2. i przechowuj to w folderze bin dowolnego folderu utworzonego dla. eg C: \ Hadoop \ bin
  3. iw programie dodaj następujący wiersz przed utworzeniem SparkContext lub SparkConf System.setProperty ("hadoop.home.dir", "C: \ Hadoop");

4

W systemie Windows 10 - należy dodać dwa różne argumenty.

(1) Dodaj nową zmienną i wartość jako - HADOOP_HOME i ścieżkę (np. C: \ Hadoop) w obszarze Zmienne systemowe.

(2) Dodaj / dołącz nowy wpis do zmiennej „Path” jako „C: \ Hadoop \ bin”.

Powyższe zadziałało dla mnie.


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

2

Mam ten sam problem podczas wykonywania testów jednostkowych. Znalazłem to obejście:

Poniższe obejście pozwala pozbyć się tej wiadomości:

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

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



1

Ustawienie zmiennej środowiskowej Hadoop_Home we właściwościach systemu nie działa dla mnie. Ale to zrobiło:

  • Ustaw Hadoop_Home na karcie środowiska Eclipse Run Configurations.
  • Postępuj zgodnie z „Instalacją środowiska Windows” stąd

0

Oprócz wspominania o zmiennej środowiskowej dla HADOOP_HOMEw C:\winutilssystemie Windows jako , musisz również upewnić się, że jesteś administratorem maszyny. Jeśli tak się nie stanie, a dodanie zmiennych środowiskowych wyświetli monit o podanie poświadczeń administratora (nawet pod USERzmiennymi), zmienne te będą miały zastosowanie po uruchomieniu wiersza polecenia jako administrator.


0

Miałem również podobny problem z następującymi szczegółami Java 1.8.0_121, Spark spark-1.6.1-bin-hadoop2.6, Windows 10 i Eclipse Oxygen. Kiedy uruchomiłem WordCount.java w Eclipse używając HADOOP_HOME jako zmiennej systemowej jak wspominałem w poprzednim poście to nie zadziałało to co u mnie zadziałało to -

System.setProperty ("hadoop.home.dir", "ŚCIEŻKA / DO / THE / DIR");

ŚCIEŻKA / DO / THE / DIR / bin = winutils.exe, niezależnie od tego, czy uruchamiasz w Eclipse jako aplikację Java, czy przez spark-submit z cmd przy użyciu

spark-submit --class groupid.artifactid.classname --master local [2] / ścieżka do pliku jar utworzonego przy użyciu maven / ścieżka do pliku testowego demo / ścieżka do polecenia katalogu wyjściowego

Przykład: Przejdź do lokalizacji składowania Spark / home / location / bin i wykonaj wysyłanie iskry, jak wspomniano,

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 \ target \ spark-quickstart-0.0.1-SNAPSHOT.jar D: \ BigData \ spark-quickstart \ wordcount.txt


0

To trudne ... Twój list polecający musi być duży. Na przykład „ C : \ ...”

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.