2017-04-20 9 views
0

spark-submit을 사용하여 jar를 실행하려고 할 때 문제가 발생했습니다.

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

임 jar 파일을 생성 할

sbt package

사용이 내 SBT 파일입니다. 그리고 모두 좋아 보인다. 그 후, 나는 이런 식으로 실행 :

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

Casbah를 사용하여 직접 롤링하는 대신 공식 MongoDB Spark Connector를 사용하는 것이 좋습니다. 참조하십시오 : https://docs.mongodb.com/spark-connector/ – Ross

+0

예 ... 나는 그것을보고 있었지만 컴파일해야만했고 idk는 방금 길을 잃었습니다. –

답변

0

sbt package은 종속성을 제외하고 코드로 jar 파일을 만듭니다. 따라서 스파크는 mongo 의존성을 어디에서 취해야할지 모릅니다. 다음 중 하나가 필요합니다. 클래스 경로에 mongo 및 기타 필수 종속성을 포함 시키거나 deps 클래스를 포함하는 "fat jar"를 빌드해야합니다. sbt-assembly 플러그인을 사용하면 두 번째 방법을 선택할 때 도움이됩니다.

+1

그래 ... 그게 효과가있어 ... 이제 내 병은 25 MB이지만 괜찮아. 고마워. –