java.io.IOException: impossibile individuare l'eseguibile null \ bin \ winutils.exe nei binari di Hadoop. Spark Eclipse su Windows 7


91

Non sono in grado di eseguire un semplice sparklavoro in Scala IDE(progetto Maven spark) installato suWindows 7

È stata aggiunta la dipendenza core Spark.

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

Errore:

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>

Risposte:


137

Ecco una buona spiegazione del tuo problema con la soluzione.

  1. Scarica winutils.exe da http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe .
  2. Imposta la tua variabile d'ambiente HADOOP_HOME a livello di sistema operativo o in modo programmatico:

    System.setProperty ("hadoop.home.dir", "percorso completo della cartella con winutils");

  3. Godere


14
Devo impostare HADOOP_HOME nella cartella hadoop invece che nella cartella bin.
Stanley

4
Inoltre, assicurati di scaricare il winutils.exe corretto in base alla versione di hadoop per cui è stato compilato Spark (quindi, non necessariamente il link sopra). Altrimenti, il dolore attende :)
NP3

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

1
si esattamente come dice @Stanley. ha lavorato con l'impostazione della cartella HADOOP_HOME in hadoop invece della cartella bin.
Jazz

@ NP3 e ​​come fai a conoscere quella versione? Sto usando l'ultimo pyspark. Grazie,
JDPeckham

64
  1. Scarica winutils.exe
  2. Crea cartella, diciamo C:\winutils\bin
  3. Copia winutils.exeall'internoC:\winutils\bin
  4. Imposta la variabile d'ambiente HADOOP_HOMEsuC:\winutils

inoltre, se hai una riga cmd aperta, riavviala affinché le variabili abbiano effetto.
eych

25

Segui questo:

  1. Crea una bincartella in qualsiasi directory (da utilizzare nel passaggio 3).

  2. Scarica winutils.exe e posizionalo nella directory bin.

  3. Ora aggiungi il System.setProperty("hadoop.home.dir", "PATH/TO/THE/DIR");tuo codice.


2
Grazie mille, proprio quello che stavo cercando
user373201

3
È da notare che il percorso da puntare non dovrebbe includere la directory "bin". Es: se il percorso in cui winutils.exe è "D: //Hadoop//bin//winutils.exe", il percorso per hadoop.home.dir dovrebbe essere "D: // Hadoop"
Keshav Pradeep Ramanath

4

se vediamo il problema di seguito

ERRORE Shell: impossibile individuare il file binario winutils nel percorso binario hadoop

java.io.IOException: impossibile individuare l'eseguibile null \ bin \ winutils.exe nei binari di Hadoop.

quindi eseguire i passaggi seguenti

  1. scarica winutils.exe da http://public-repo-1.hortonworks.com/hdp- win-alpha / winutils.exe.
  2. e tienilo nella cartella bin di qualsiasi cartella che hai creato per.eg C: \ Hadoop \ bin
  3. e nel programma aggiungi la seguente riga prima di creare SparkContext o SparkConf System.setProperty ("hadoop.home.dir", "C: \ Hadoop");

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

3

Su Windows 10, dovresti aggiungere due diversi argomenti.

(1) Aggiungere la nuova variabile e il valore come - HADOOP_HOME e percorso (ad esempio c: \ Hadoop) in Variabili di sistema.

(2) Aggiungere / accodare una nuova voce alla variabile "Path" come "C: \ Hadoop \ bin".

Quanto sopra ha funzionato per me.


2

Ho avuto lo stesso problema durante l'esecuzione di unit test. Ho trovato questa soluzione alternativa:

La seguente soluzione alternativa consente di eliminare questo messaggio:

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

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


2

In alternativa puoi scaricare winutils.exeda GITHub:

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

sostituisci hadoop-2.7.1con la versione che desideri e inserisci il fileD:\hadoop\bin

Se non disponi dei diritti di accesso alle impostazioni delle variabili di ambiente sulla tua macchina, aggiungi semplicemente la riga seguente al tuo codice:

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

1

L'impostazione della variabile di ambiente Hadoop_Home nelle proprietà di sistema non ha funzionato per me. Ma questo ha fatto:

  • Impostare Hadoop_Home nella scheda dell'ambiente Eclipse Run Configurations.
  • Segui la "Configurazione dell'ambiente Windows" da qui

0

Oltre a menzionare la tua variabile d'ambiente per HADOOP_HOMEWindows come C:\winutils, devi anche assicurarti di essere l'amministratore della macchina. In caso contrario e l'aggiunta di variabili di ambiente richiede le credenziali di amministratore (anche sotto le USERvariabili), queste variabili saranno applicabili una volta avviato il prompt dei comandi come amministratore.


0

Ho anche affrontato il problema simile con i seguenti dettagli Java 1.8.0_121, Spark spark-1.6.1-bin-hadoop2.6, Windows 10 ed Eclipse Oxygen.Quando ho eseguito il mio WordCount.java in Eclipse utilizzando HADOOP_HOME come variabile di sistema come accennato nel post precedente, non ha funzionato, quello che ha funzionato per me è -

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

PATH / TO / THE / DIR / bin = winutils.exe sia che venga eseguito in Eclipse come applicazione Java o tramite spark-submit da cmd utilizzando

spark-submit --class groupid.artifactid.classname --master local [2] / percorso del file jar creato utilizzando maven / percorso di un file di prova demo / percorso del comando della directory di output

Esempio: vai alla posizione bin di Spark / home / location / bin ed esegui lo spark-submit come menzionato,

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

È complicato ... La tua lettera di deposito deve essere capical. Ad esempio " C : \ ..."

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.