com/mongodb/casbah/Imports$ ClassNotFound 运行 火花提交和 Mongo

com/mongodb/casbah/Imports$ ClassNotFound running spark-submit and Mongo

我在尝试使用 spark-submit 运行 jar 时遇到问题。这是我的 sbt 文件:

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

我正在使用

sbt package

创建 jar 文件。一切看起来都很好。然后,我是这样执行的:

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(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 class 是这个:

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

我不知道为什么会这样。第一次遇到这种问题

希望有人能帮助我。

非常感谢。

sbt package 使用您的代码创建 jar,不包括依赖项。所以,spark 不知道去哪里取 mongo 依赖。 您需要:将 mongo 和其他必需的依赖项包含到类路径中,或者构建 "fat jar" 以包含 deps 类。 sbt-assembly 如果您选择第二种方法,插件会帮助您。