我正在尝试将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();
答案 0 :(得分:1)
我可以看到两个可能的错误:
--jars
。从documentation开始,关于Jar名称之后的参数:传递给主类的main方法的参数(如果有的话)
编辑:
您should也设置了--driver-class-path=/path/to/jar/with/driver.jar
取自docs的其他选项是:
JDBC驱动程序类必须对原始类加载器可见 在客户端会话和所有执行程序上。这是因为Java的 DriverManager类执行安全检查,导致它忽略 一个人去的时候,所有的驱动程序对原始类加载器都不可见 打开连接。 一种方便的方法是修改 所有工作节点上的compute_classpath.sh包含您的驱动程序JAR。