2017-04-20 2 views
0

Ich habe ein Problem, wenn Sie versuchen, ein Glas mithilfe von Spark-Submit auszuführen. Das ist meine sbt-Datei:

name := "Reading From Mongo Project" 
version := "1.0" 
scalaVersion := "2.10.4" 
libraryDependencies += "org.mongodb" %% "casbah" % "2.5.0" 

Im

sbt package

mit JAR-Datei zu erstellen. Und alles sieht gut aus. Dann ausgeführt ich es so:

spark-submit --class "ReadingFromMongo" --master local /home/bigdata1/ReadingFromMongoScala/target/scala-2.10/reading-from-mongo-project_2.10-1.0.jar 

Und habe diesen Fehler:

Error: application failed with exception 
java.lang.NoClassDefFoundError: com/mongodb/casbah/Imports$ 
     at ReadingFromMongo$.main(ReadingFromMongo.scala:6) 
     at ReadingFromMongo.main(ReadingFromMongo.scala) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:497) 
     at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:577) 
     at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:174) 
     at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:197) 
     at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:112) 
     at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 
Caused by: java.lang.ClassNotFoundException: com.mongodb.casbah.Imports$ 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 11 more 

Meine ReadingFromMongo Klasse ist diese:

import com.mongodb.casbah.Imports._ 

object ReadingFromMongo { 
    def main(args: Array[String]) { 
     val mongoClient = MongoClient("mongocluster", 27017) 
     val db = mongoClient("Grupo12") 
     val coll = db("test") 
     println("\n\Total: "+coll.count()+"\n") 
    } 
} 

Ich weiß nicht, warum das passiert ist. Dies ist das erste Mal, dass ich mit dieser Art von Problem konfrontiert bin.

Hoffe jemand kann mir helfen.

Vielen Dank.

+0

Ich empfehle Ihnen dringend, den offiziellen MongoDB Spark Connector zu verwenden, anstatt ihn mit Casbah selbst zu rollen. Siehe: https://docs.mongodb.com/spark-connector/ – Ross

+0

Ja ... und ich habe darauf geachtet, aber ich musste es kompilieren und idk, ich bin nur verloren. –

Antwort

0

sbt package erstellt jar mit Ihrem Code, ohne Abhängigkeiten. Also, Spark weiß nicht, wo man Mongo-Abhängigkeiten nehmen soll. Sie müssen entweder: mongo und andere erforderliche Abhängigkeiten in den Klassenpfad aufnehmen oder "fat jar" erstellen, das deps-Klassen enthält. sbt-assembly Plugin hilft Ihnen, wenn Sie zweiten Ansatz wählen.

+1

Yep ... das funktioniert ... jetzt ist mein Glas 25 MB, aber es ist in Ordnung. Danke vielmals. –

Verwandte Themen