java.io.IOException: impossible de localiser l'exécutable null \ bin \ winutils.exe dans les binaires Hadoop. spark Eclipse sur Windows 7

91

Je ne peux pas exécuter un sparktravail simple dans Scala IDE(projet Maven spark) installé surWindows 7

La dépendance du noyau Spark a été ajoutée.

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

Erreur:

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>
Elfique_Lame
la source

Réponses:

137

Voici une bonne explication de votre problème avec la solution.

  1. Téléchargez winutils.exe depuis http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe .
  2. Configurez votre variable d'environnement HADOOP_HOME au niveau du système d'exploitation ou par programme:

    System.setProperty ("hadoop.home.dir", "chemin complet vers le dossier avec winutils");

  3. Prendre plaisir

Taky
la source
14
Je dois définir HADOOP_HOME dans le dossier hadoop au lieu du dossier bin.
Stanley
4
Assurez-vous également de télécharger le bon winutils.exe en fonction de la version de hadoop pour laquelle spark est compilé (donc pas nécessairement le lien ci-dessus). Sinon, la douleur attend :)
NP3
System.setProperty ("hadoop.home.dir", "C: \\ hadoop-2.7.1 \\")
Shyam Gupta
1
oui exactement comme le dit @Stanley. travaillé avec la configuration du dossier HADOOP_HOME vers hadoop au lieu du dossier bin.
Jazz
@ NP3 et comment connaissez-vous cette version? J'utilise le dernier pyspark. Merci,
JDPeckham
64
  1. Télécharger winutils.exe
  2. Créer un dossier, par exemple C:\winutils\bin
  3. Copier à l' winutils.exeintérieurC:\winutils\bin
  4. Définissez la variable d'environnement HADOOP_HOMEsurC:\winutils
Déokant Gupta
la source
De plus, si vous avez une ligne cmd ouverte, redémarrez-la pour que les variables prennent effet.
eych
25

Suivez ceci:

  1. Créez un bindossier dans n'importe quel répertoire (à utiliser à l'étape 3).

  2. Téléchargez winutils.exe et placez-le dans le répertoire bin.

  3. Maintenant, ajoutez System.setProperty("hadoop.home.dir", "PATH/TO/THE/DIR");votre code.

Ani Menon
la source
2
Merci beaucoup, exactement ce que je cherchais
user373201
3
Il est à noter que le chemin à pointer ne doit pas inclure le répertoire 'bin'. Ex: Si le chemin où winutils.exe est "D: //Hadoop//bin//winutils.exe", alors le chemin de hadoop.home.dir doit être "D: // Hadoop"
Keshav Pradeep Ramanath
4

si nous voyons le problème ci-dessous

ERREUR Shell: Impossible de localiser le binaire winutils dans le chemin binaire hadoop

java.io.IOException: impossible de localiser l'exécutable null \ bin \ winutils.exe dans les binaires Hadoop.

puis suivez les étapes

  1. téléchargez winutils.exe depuis http://public-repo-1.hortonworks.com/hdp- win-alpha / winutils.exe.
  2. et conservez-le sous le dossier bin de tout dossier que vous avez créé pour.eg C: \ Hadoop \ bin
  3. et dans le programme, ajoutez la ligne suivante avant de créer SparkContext ou SparkConf System.setProperty ("hadoop.home.dir", "C: \ Hadoop");
Prem S
la source
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
la source
3

Sous Windows 10, vous devez ajouter deux arguments différents.

(1) Ajoutez la nouvelle variable et la nouvelle valeur comme - HADOOP_HOME et le chemin (c'est-à-dire c: \ Hadoop) sous Variables système.

(2) Ajouter / ajouter une nouvelle entrée à la variable "Chemin" comme "C: \ Hadoop \ bin".

Ce qui précède a fonctionné pour moi.

user1023627
la source
2

J'ai eu le même problème lors de l'exécution de tests unitaires. J'ai trouvé cette solution de contournement:

La solution de contournement suivante permet de se débarrasser de ce message:

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

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

Joabe Lucena
la source
2

Vous pouvez également télécharger winutils.exedepuis GITHub:

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

remplacez hadoop-2.7.1par la version souhaitée et placez le fichier dansD:\hadoop\bin

Si vous ne disposez pas des droits d'accès aux paramètres des variables d'environnement sur votre machine, ajoutez simplement la ligne ci-dessous à votre code:

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

La définition de la variable d'environnement Hadoop_Home dans les propriétés système ne fonctionnait pas pour moi. Mais cela a fait:

  • Définissez Hadoop_Home dans l'onglet d'environnement Eclipse Run Configurations.
  • Suivez la 'Configuration de l'environnement Windows' à partir d' ici
Ramya
la source
0

En plus de mentionner votre variable d'environnement pour HADOOP_HOMEdans windows as C:\winutils, vous devez également vous assurer que vous êtes l'administrateur de la machine. Si ce n'est pas le cas et l'ajout de variables d'environnement vous demande les informations d'identification d'administrateur (même sous les USERvariables), ces variables seront applicables une fois que vous aurez démarré votre invite de commande en tant qu'administrateur.

Abhishek Sakhuja
la source
0

J'ai également rencontré le problème similaire avec les détails suivants Java 1.8.0_121, Spark spark-1.6.1-bin-hadoop2.6, Windows 10 et Eclipse Oxygen.Lorsque j'ai exécuté mon WordCount.java dans Eclipse en utilisant HADOOP_HOME comme variable système comme mentionné dans le post précédent, cela n'a pas fonctionné, ce qui a fonctionné pour moi est -

System.setProperty ("hadoop.home.dir", "CHEMIN / VERS / LE / DIR");

PATH / TO / THE / DIR / bin = winutils.exe si vous exécutez dans Eclipse en tant qu'application Java ou par spark-submit à partir de cmd en utilisant

spark-submit --class groupid.artifactid.classname --master local [2] / chemin vers le fichier jar créé à l'aide de maven / chemin vers un fichier de test de démonstration / chemin vers la commande de répertoire de sortie

Exemple: accédez à l'emplacement bin de Spark / home / location / bin et exécutez le spark-submit comme mentionné,

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

Abdus Mondal
la source
0

C'est une question délicate ... Votre lettre de stockage doit être capicale. Par exemple " C : \ ..."

Achille
la source