2017-04-20 71 views
0

當嘗試使用spark-submit運行jar時,我遇到了一個問題。這是我的SBT文件:使用

sbt package

創建jar文件

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

林。而且一切看起來不錯。然後,我執行這種方式:

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

而得到這個錯誤:

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 

我ReadingFromMongo類是這個:

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") 
    } 
} 

我不知道爲什麼會出現這種情況。這是我第一次遇到這種問題。

希望有人能幫助我。

非常感謝。

+0

我強烈建議您使用官方的MongoDB Spark連接器,而不是使用Casbah來自己推出。請參閱:https://docs.mongodb.com/spark-connector/ – Ross

+0

是的......我期待着它,但我必須編譯它和idk,我纔會迷路。 –

回答

0

sbt package使用您的代碼創建jar,不包括依賴項。所以,spark不知道從哪裏獲取mongo依賴關係。 您需要:將mongo和其他必需的依賴包括到classpath中,或者構建包含deps類的「fat jar」。 sbt-assembly插件可以幫助你,如果你選擇第二種方法。

+1

是的...這是行之有效的...現在我的jar是25 MB,但沒關係。非常感謝。 –