2015-05-28 16 views
13

Posso eseguire una scintilla con successo nella shell di scintilla ma quando i suoi pacchetti ed eseguire attraverso spark-submit Im ottenendo un NoSuchMethodError.Spark: c'è un modo per stampare classpath sia di spark-shell che spark?

Questo indica per me una sorta di disadattamento di classpath. C'è un modo per confrontare i due percorsi di classe? Una sorta di dichiarazione di registrazione?

Grazie!

15/05/28 12:46:46 ERROR Executor: Exception in task 1.0 in stage 0.0 (TID 1) 
java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)Ljava/lang/Object; 
    at com.ldamodel.LdaModel$$anonfun$5$$anonfun$apply$5.apply(LdaModel.scala:22) 
    at com.ldamodel.LdaModel$$anonfun$5$$anonfun$apply$5.apply(LdaModel.scala:22) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) 
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33) 
    at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:34) 
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244) 
    at scala.collection.AbstractTraversable.map(Traversable.scala:105) 
    at com.ldamodel.LdaModel$$anonfun$5.apply(LdaModel.scala:22) 
    at com.ldamodel.LdaModel$$anonfun$5.apply(LdaModel.scala:22) 
    at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371) 
    at org.apache.spark.util.collection.ExternalSorter.insertAll(ExternalSorter.scala:202) 
    at org.apache.spark.shuffle.sort.SortShuffleWriter.write(SortShuffleWriter.scala:56) 
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:68) 
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41) 
    at org.apache.spark.scheduler.Task.run(Task.scala:64) 
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:203) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
+0

Questo può anche essere il risultato di una mancata corrispondenza di versione tra le versioni scintilla e Scala utilizzati per la costruzione del file .jar e la versione sul cluster su cui potresti far scorrere i vasi. Con spark-shell, questo problema è inesistente. – Amir

+0

@catrapture Sei riuscito a risolvere questo problema specifico? Sto avendo lo stesso problema nello stesso contesto (spark-submit con jar grasso), e non sono stato in grado di risolvere finora. Grazie. –

risposta

17

Penso this should work:

import java.lang.ClassLoader 
    val cl = ClassLoader.getSystemClassLoader 
    cl.asInstanceOf[java.net.URLClassLoader].getURLs.foreach(println) 
-3
/opt/spark/bin/compute-classpath.sh 
+0

Che sistema stai? –

11

senza modificare il codice:

SPARK_PRINT_LAUNCH_COMMAND=true /usr/lib/spark/bin/spark-shell 

funziona anche con spark-submit.

0

Questo dovrebbe fare il trucco senza dover apportare modifiche al codice:

--conf 'spark.driver.extraJavaOptions=-verbose:class' 
--conf 'spark.executor.extraJavaOptions=-verbose:class' 
+0

questo è troppo verboso per me, mostrando cose come '[Loaded java.awt.event.ActionListener da /usr/lib/jvm/java-1.8.0-oracle-1.8.0_152.x86_64/jre/lib/rt. vaso] ' – eddygeek