ClassNotFoundException使用Spark连接MariadB



我正在尝试将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. --jars应在JAR名称之前使用。从文档中,关于jar姓名的争论:

参数传递给主类的主要方法,如果有任何

  1. 文件应在所有节点上的同一路径上或位于分布式文件系统中的hdfs(例如HDFS) - 如果您仅在主或驱动程序中获得文件,则应用程序会引起错误

编辑:

您还应该设置--driver-class-path=/path/to/jar/with/driver.jar

从文档中获取的其他选项是:

JDBC驱动程序类必须是原始类加载器可见的 在客户端会话和所有执行者上。这是因为爪哇 Drivermanager类进行安全检查,导致IT忽略 当一个人去时,所有驱动程序都不可见 打开连接。这样做的一种便捷方法是修改 在所有工人节点上的compute_classpath.sh包括您的驱动程序罐。

最新更新