web-dev-qa-db-fra.com

NoClassDefFoundError com.Apache.hadoop.fs.FSDataInputStream lors de l'exécution de shell

J'ai téléchargé la version de pré-compilation de spark 1.4.0 sans hadoop (avec Haddop fourni par l'utilisateur). Lorsque j'ai exécuté la commande spark-Shell, j'ai eu cette erreur:

> Exception in thread "main" Java.lang.NoClassDefFoundError: org/Apache/hadoop/fs/
FSDataInputStream
        at org.Apache.spark.deploy.SparkSubmitArguments$$anonfun$mergeDefaultSpa
rkProperties$1.apply(SparkSubmitArguments.scala:111)
        at org.Apache.spark.deploy.SparkSubmitArguments$$anonfun$mergeDefaultSpa
rkProperties$1.apply(SparkSubmitArguments.scala:111)
        at scala.Option.getOrElse(Option.scala:120)
        at org.Apache.spark.deploy.SparkSubmitArguments.mergeDefaultSparkPropert
ies(SparkSubmitArguments.scala:111)
        at org.Apache.spark.deploy.SparkSubmitArguments.<init>(SparkSubmitArgume
nts.scala:97)
        at org.Apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:106)
        at org.Apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: Java.lang.ClassNotFoundException: org.Apache.hadoop.fs.FSDataInputStr
eam
        at Java.net.URLClassLoader$1.run(URLClassLoader.Java:366)
        at Java.net.URLClassLoader$1.run(URLClassLoader.Java:355)
        at Java.security.AccessController.doPrivileged(Native Method)
        at Java.net.URLClassLoader.findClass(URLClassLoader.Java:354)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:425)
        at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:308)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:358)
        ... 7 more

J'ai cherché sur Internet, il est dit que HADOOP_HOME n'a pas encore été défini dans spark-env.cmd. Mais je ne parviens pas à trouver spark-env.cmd dans le dossier d'installation d'étincelle… .. J'ai suivi la commande spark-Shell et il semble qu'il n'y ait pas HADOOP_CONFIG dans celui-ci. J'ai essayé d'ajouter la variable HADOOP_HOME à la variable d'environnement, mais cela donne toujours la même exception.

En fait, je n'utilise pas vraiment le hadoop. J'ai téléchargé hadoop comme solution de contournement comme suggéré dans cette question

J'utilise Windows 8 et Scala 2.10. 

Toute aide serait appréciée. Merci.

32
David

Le "sans Hadoop" dans le nom de la construction de Spark est trompeur: cela signifie que la compilation n'est pas liée à une distribution Hadoop spécifique, pas qu'elle est censée fonctionner sans elle: l'utilisateur doit indiquer où trouver Hadoop (voir https: //spark.Apache.org/docs/latest/hadoop-provided.html )

Une façon simple de résoudre ce problème est de:

  1. Procurez-vous les binaires Windows Hadoop. Idéalement, construisez-les, mais cela est douloureux (pour quelques astuces voir: Hadoop sous Windows/Erreur d'installation ). Sinon Google, par exemple, vous pouvez par exemple actuellement télécharger la version 2.6.0 ici: http://www.barik.net/archive/2015/01/19/172716/
  2. Créez un fichier spark-env.cmd ayant l'apparence suivante (modifiez le chemin d'accès Hadoop afin qu'il corresponde à votre installation): @echo off set HADOOP_HOME=D:\Utils\hadoop-2.7.1 set PATH=%HADOOP_HOME%\bin;%PATH% set SPARK_DIST_CLASSPATH=<paste here the output of %HADOOP_HOME%\bin\hadoop classpath>
  3. Placez ce spark-env.cmd soit dans un dossier conf situé au même niveau que votre dossier de base Spark (ce qui peut paraître étrange), soit dans un dossier indiqué par la variable d'environnement SPARK_CONF_DIR.
40
tiho

J'ai eu le même problème, en fait, il est mentionné sur la page de démarrage de Spark comment le gérer:

### in conf/spark-env.sh ###

# If 'hadoop' binary is on your PATH
export SPARK_DIST_CLASSPATH=$(hadoop classpath)

# With explicit path to 'hadoop' binary
export SPARK_DIST_CLASSPATH=$(/path/to/hadoop/bin/hadoop classpath)

# Passing a Hadoop configuration directory
export SPARK_DIST_CLASSPATH=$(hadoop --config /path/to/configs classpath)

Si vous voulez utiliser votre propre hadoop, suivez l’une des 3 options, copiez-le et collez-le dans le fichier spark-env.sh:

1- si vous avez le hadoop sur votre PATH

2- vous voulez montrer explicitement le binaire hadoop 

3- vous pouvez aussi montrer le dossier de configuration hadoop

http://spark.Apache.org/docs/latest/hadoop-provided.html

17
Hamed MP

Moi aussi j'avais le problème,

export SPARK_DIST_CLASSPATH=`hadoop classpath`

résolu le problème. 

13

J'ai rencontré la même erreur en essayant de se familiariser avec spark. D'après ce que je comprends du message d'erreur, spark n'a pas besoin d'un cluster hadoop pour fonctionner, mais il a aussi besoin de certaines classes hadoop. Comme je ne faisais que jouer avec spark et ne me demandais pas quelle version de librairies hadoop était utilisée, je viens de télécharger un binaire spark pré-construit avec une version de hadoop (2.6) et tout a commencé à bien fonctionner. 

5
Rohith

Entrez dans SPARK_HOME -> conf

copiez le fichier spark-env.sh.template et renommez-le en spark-env.sh Dans ce fichier, vous pouvez définir les paramètres de spark.

3

linux

ENV SPARK_DIST_CLASSPATH="$HADOOP_HOME/etc/hadoop/*:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/hdfs/lib/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/yarn/lib/*:$HADOOP_HOME/share/hadoop/yarn/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/tools/lib/*"

les fenêtres

set SPARK_DIST_CLASSPATH=%HADOOP_HOME%\etc\hadoop\*;%HADOOP_HOME%\share\hadoop\common\lib\*;%HADOOP_HOME%\share\hadoop\common\*;%HADOOP_HOME%\share\hadoop\hdfs\*;%HADOOP_HOME%\share\hadoop\hdfs\lib\*;%HADOOP_HOME%\share\hadoop\hdfs\*;%HADOOP_HOME%\share\hadoop\yarn\lib\*;%HADOOP_HOME%\share\hadoop\yarn\*;%HADOOP_HOME%\share\hadoop\mapreduce\lib\*;%HADOOP_HOME%\share\hadoop\mapreduce\*;%HADOOP_HOME%\share\hadoop\tools\lib\*
2

Exécuter ci-dessous à partir de votre répertoire juste avant d'exécuter spark-submit -

export SPARK_DIST_CLASSPATH=`hadoop classpath`
1
Spidey Praful

pour mon cas

l'exécution du travail d'étincelle localement diffère de son exécution sur le cluster. sur le cluster, vous pouvez avoir une dépendance/un contexte différent à suivre. Donc, essentiellement dans votre pom.xml, vous pouvez avoir des dépendances déclarées comme provided 

lors de l'exécution locale, vous n'avez pas besoin de ces dépendances provided. juste les commenter et reconstruire à nouveau. 

0
zinking

Merci beaucoup. Cela a très bien fonctionné, mais j'ai également dû ajouter les bocaux à étincelles au chemin de classe: ; c:\spark\lib * De plus, le mot "echo" manque dans la dernière ligne du fichier cmd; il faut donc dire: echo% SPARK_CMD%

0
Emul

Je trouve enfin une solution pour supprimer l'exception.

Dans spark-class2.cmd, ajoutez:

set HADOOP_CLASS1=%HADOOP_HOME%\share\hadoop\common\*
set HADOOP_CLASS2=%HADOOP_HOME%\share\hadoop\common\lib\*
set HADOOP_CLASS3=%HADOOP_HOME%\share\hadoop\mapreduce\*
set HADOOP_CLASS4=%HADOOP_HOME%\share\hadoop\mapreduce\lib\*
set HADOOP_CLASS5=%HADOOP_HOME%\share\hadoop\yarn\*
set HADOOP_CLASS6=%HADOOP_HOME%\share\hadoop\yarn\lib\*
set HADOOP_CLASS7=%HADOOP_HOME%\share\hadoop\hdfs\*
set HADOOP_CLASS8=%HADOOP_HOME%\share\hadoop\hdfs\lib\*

set CLASSPATH=%HADOOP_CLASS1%;%HADOOP_CLASS2%;%HADOOP_CLASS3%;%HADOOP_CLASS4%;%HADOOP_CLASS5%;%HADOOP_CLASS6%;%HADOOP_CLASS7%;%HADOOP_CLASS8%;%LAUNCH_CLASSPATH%

Ensuite, changez:

"%RUNNER%" -cp %CLASSPATH%;%LAUNCH_CLASSPATH% org.Apache.spark.launcher.Main %* > %LAUNCHER_OUTPUT%

à :

"%RUNNER%" -Dhadoop.home.dir=*hadoop-installation-folder* -cp %CLASSPATH% %Java_OPTS% %*

Cela fonctionne bien avec moi, mais je ne suis pas sûr que ce soit la meilleure solution.

0
David

J'ai eu le même problème .... Exception dans le fil "principal" Java.lang.NoClassDefFoundError: org/Apache/hadoop/fs / FSDataInputStream at org.Apache.spark.deploy.SparkSubmitArguments $$ anonfun $ mergeDefaultSpa rkProperties $ 1.apply (SparkSubmitArguments.scala: 111) ... .__ Ensuite, j'ai réalisé que j'avais installé la version spark sans hadoop. J'ai installé la version "avec hadoop", le problème est parti.

0
Mayukh

J'ai rencontré la même erreur. Je voulais installer spark sur mon PC Windows et j'ai donc téléchargé la version sans hadoop de spark, mais vous avez besoin des bibliothèques hadoop! Alors téléchargez une version de hadoop spark et définissez les variables d’environnement.

0
indraja reddy

J'ai eu cette erreur parce que le fichier a été copié à partir de Windows .

dos2unix file_name
0
Alex Grigore