2015-05-28 1 views
13

Ich kann einen Spark-Job erfolgreich in der Spark-Shell ausführen, aber wenn seine Pakete und durchlaufen Spark-submit Im Erhalten eines NoSuchMethodError.Spark: Gibt es eine Möglichkeit, Klassenpfad von Funkenschale und Funken auszudrucken?

Dies weist auf eine Art von Mismatch Klassenpfade. Kann ich die beiden Klassenwege vergleichen? Eine Art Logging-Anweisung?

Danke!

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

Dies auch ein Ergebnis einer Versionskonflikt zwischen den Funken und scala Versionen für den Aufbau die .jar-Datei und die Version auf dem Cluster verwendet werden kann, dass Sie die Gläser vielleicht laufen lassen. Bei Spark-Shell ist dieses Problem nicht vorhanden. – Amir

+0

@catrapture Konnten Sie dieses spezifische Problem lösen? Ich habe das gleiche Problem auch im selben Zusammenhang (Funken einreichen mit Fettglas), und war bisher nicht in der Lage, zu lösen. Vielen Dank. –

Antwort

17

Ich denke 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

In welchem ​​System arbeiten Sie? –

11

Ohne den Code zu ändern:

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

Auch mit spark-submit arbeitet.

0

Diese den Trick Änderungen, ohne dass irgendwelche Code tun soll:

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

das ist viel zu ausführlich für mich und zeigt Sachen wie '[Loaded java.awt.event.ActionListener von /usr/lib/jvm/java-1.8.0-oracle-1.8.0_152.x86_64/jre/lib/rt. Glas] ' – eddygeek

Verwandte Themen