使用Spark连接MariaDB时出现ClassNotFoundException

时间:2016-12-20 12:17:34

标签: java scala apache-spark sbt apache-spark-sql

我正在尝试将Spark连接到MariaDB,而我正在

  

线程中的异常" main" java.lang.ClassNotFoundException:org.mariadb.jdbc.Driver

现在,在您将其标记为重复之前,我知道错误意味着什么,并且我已经阅读了不同的主题,但没有成功。

这是我的build.sbt

scalaVersion := "2.11.8"

name := "SparkJdbc"

libraryDependencies ++= Seq(
    "org.apache.spark" %% "spark-core" % "2.0.2",
    "org.apache.spark" %% "spark-sql" % "2.0.2",
    "org.mariadb.jdbc" % "mariadb-java-client" % "1.5.2"
)

我也有单独的罐子,我已经尝试了

spark-submit --class SparkJdbc target/scala-2.11/sparkjdbc_2.11-0.1-SNAPSHOT.jar 
--jars /path/to/mariadb-java-client-1.5.2.jar

但是同样的错误也失败了。

以下是我用来连接的代码

val (driver, url, username, password) = ("org.mariadb.jdbc.Driver", "jdbc:mysql://localhost/db1", "user", "password");

Class.forName(driver).newInstance;

val data = spark.sqlContext.read
    .format("jdbc")
    .option("url", url)
    .option("user", username)
    .option("password", password)
    .option("dbtable", "SELECT * FROM db1.football LIMIT 10")
    .load();

1 个答案:

答案 0 :(得分:1)

我可以看到两个可能的错误:

    在jar名称之前应该使用
  1. --jars。从documentation开始,关于Jar名称之后的参数:
  2.   

    传递给主类的main方法的参数(如果有的话)

    1. 文件应位于所有节点上的相同路径上,或位于分布式文件系统中,如HDFS - 如果只有主文件或驱动程序中的文件,则应用程序将引发错误
    2. 编辑:

      should也设置了--driver-class-path=/path/to/jar/with/driver.jar

      取自docs的其他选项是:

        

      JDBC驱动程序类必须对原始类加载器可见   在客户端会话和所有执行程序上。这是因为Java的   DriverManager类执行安全检查,导致它忽略   一个人去的时候,所有的驱动程序对原始类加载器都不可见   打开连接。 一种方便的方法是修改   所有工作节点上的compute_classpath.sh包含您的驱动程序JAR。