2015-06-18 24 views
26

Ho scaricato la versione prebuild di spark 1.4.0 senza hadoop (con Haddop fornito dall'utente). Quando ho eseguito il comando scintilla scocca, ho ottenuto questo errore:NoClassDefFoundError com.apache.hadoop.fs.FSDataInputStream quando si esegue spark-shell

> 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 

ho cercato su Internet, si dice che HADOOP_HOME non è stato ancora impostato in scintilla-env.cmd. Ma non riesco a trovare spark-env.cmd nella cartella di installazione di spark. Ho tracciato il comando spark-shell e sembra che non ci sia HADOOP_CONFIG. Ho provato ad aggiungere HADOOP_HOME alla variabile d'ambiente, ma continua a dare la stessa eccezione.

In realtà non uso davvero il hadoop. Ho scaricato hadoop come soluzione alternativa come suggerito in this question

Sto usando Windows 8 e Scala 2.10.

Qualsiasi aiuto sarà apprezzato. Grazie.

+0

Ho avuto lo stesso problema, poi ho installato con Hadoop-2 uno e che sta funzionando benissimo. – Chitrasen

risposta

33

Il "senza Hadoop" nel nome build di Spark è fuorviante: significa che la build non è legata a una specifica distribuzione Hadoop, non che è pensata per funzionare senza di essa: l'utente dovrebbe indicare dove trovare Hadoop (vedere https://spark.apache.org/docs/latest/hadoop-provided.html)

Un modo pulito per risolvere questo problema è quello di:

  1. ottenete i binari Hadoop per Windows. Idealmente li costruisci, ma questo è doloroso (per alcuni suggerimenti vedi: Hadoop on Windows Building/ Installation Error). In caso contrario, Google un po 'su, per esempio, attualmente è possibile scaricare 2.6.0 da qui: http://www.barik.net/archive/2015/01/19/172716/
  2. Creare un file spark-env.cmd simile a questo (modifica percorso Hadoop per abbinare l'installazione): @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. mettere questo spark-env.cmd sia in conf cartella situata allo stesso livello della cartella base di Spark (che potrebbe sembrare strana) o in una cartella indicata dalla variabile di ambiente SPARK_CONF_DIR.
+1

Ho seguito i passaggi descritti in https://spark.apache.org/docs/latest/hadoop-provided.html e ho scelto il primo caso con binario "hadoop" sul tuo PATH, ma sto ancora ricevendo lo stesso problema Ho già aggiunto HADOOP_HOME nelle variabili di ambiente, ecco perché non vedo alcun motivo per impostare questa variabile in script. Potrei darmi qualche idea del perché questo problema compaia ancora? – Ray

+0

Capisco il mio problema, ma io avere una domanda: è possibile invocare in windows cmd file $ (hadoop classpath) nello stesso modo in cui si trova in Linux bash file? – Ray

+0

@Ray vorrei poter aiutare, ma non sono un esperto, tutto quello che posso dire è tutto ciò che ha funzionato per me ... Sono sicuro che c'è un modo per chiamare automaticamente "classpath hadoop" in spark-env.cmd per evitare la copia/incolla manuale, ma non l'ho esaminato. In bocca al lupo! – tiho

2

Entrare in SPARK_HOME -> conf scintilla env.sh.template

copia e rinominarlo spark-env.sh All'interno di questo file, è possibile impostare i parametri per la scintilla.

+0

Grazie per la risposta. Qualche idea su quale variabile dovrei modificare? Lo ho rinominato anche in spark-env.cmd perché sto usando windows e aggiungo "set HADOOP_CONF_DIR = * path" ma dà la stessa eccezione .. – David

+0

Innanzitutto, prova a impostare HADOOP_HOME in spark-env.cmd ed eseguirlo, ma se lo stesso problema persiste, quindi esportare il file jar hadoop-common sul classpath spark nello stesso file di configurazione. –

+0

Ho impostato HADOOP_HOME e copiato hadoop-common.jar sia nella cartella lib che conf .. ma ancora senza fortuna :( – David

0

Alla fine trovo una soluzione per rimuovere l'eccezione.

In scintilla class2.cmd, aggiungere:

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% 

Poi, il cambiamento:

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

a:

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

Funziona bene con me, ma io sono non sono sicuro che questa sia la soluzione migliore.

5

Ho incontrato lo stesso errore quando ho provato a familiarizzare con la scintilla. La mia comprensione del messaggio di errore è che mentre spark non ha bisogno di un cluster hadoop da eseguire, ha bisogno di alcune classi hadoop.Dato che stavo solo giocando con la scintilla e non mi importava quale versione delle librerie hadoop venissi usata, ho appena scaricato una scintilla binary pre-costruita con una versione di hadoop (2.6) e le cose hanno iniziato a funzionare bene.

13

Ho avuto lo stesso problema, in realtà è menzionato sul Ottenere pagina iniziato di Spark come gestirlo:

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

Se si desidera utilizzare il proprio Hadoop seguire una delle 3 opzioni, copia e incollarlo nel file di spark-env.sh:

1- se avete la Hadoop sul vostro cammino

2- si desidera mostrare Hadoop binario esplicitamente

3- si può anche mostrare cartella di configurazione Hadoop

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

0

Grazie mille. Ciò ha funzionato alla perfezione, ma ho dovuto aggiungere anche i jar spark al classpath: ; c: \ spark \ lib * Inoltre, l'ultima riga del file cmd manca la parola "echo"; così si dovrebbe dire: echo% SPARK_CMD%

0

Ho avuto lo stesso problema .... Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/Hadoop/fs/ FSDataInputStream a org.apache .spark.deploy.SparkSubmitArguments $$ anonfun $ mergeDefaultSpa rkProperties $ 1.apply (SparkSubmitArguments.scala: 111) ... Poi ho capito che avevo installato la versione spark senza hadoop. Ho installato la versione "with-hadoop" il problema è andato via.

0

per il mio caso

esecuzione di posti di lavoro a livello locale scintilla differisce l'esecuzione su cluster. nel cluster potresti avere una diversa dipendenza/contesto da seguire. quindi essenzialmente nel tuo pom.xml potresti avere delle dipendenze dichiarate come provided.

durante l'esecuzione locale, non sono necessarie queste dipendenze provided. basta decommentarli e ricostruirli di nuovo.

7

Anch'io ho avuto il problema,

export SPARK_DIST_CLASSPATH=`hadoop classpath` 

ha risolto il problema.

+0

completamente utile – Turbero

0

Ho riscontrato lo stesso errore. Volevo installare la scintilla sul mio PC Windows e quindi ho scaricato la versione senza hadoop di spark, ma risulta che hai bisogno delle librerie hadoop! quindi scarica qualsiasi versione di hadoop spark e imposta le variabili di ambiente.

1

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/*" 

finestre

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\* 
Problemi correlati