我正在尝试将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();
我可以看到两个可能的错误:
-
--jars
应在JAR名称之前使用。从文档中,关于jar姓名的争论:
参数传递给主类的主要方法,如果有任何
- 文件应在所有节点上的同一路径上或位于分布式文件系统中的hdfs(例如HDFS) - 如果您仅在主或驱动程序中获得文件,则应用程序会引起错误
编辑:
您还应该设置--driver-class-path=/path/to/jar/with/driver.jar
从文档中获取的其他选项是:
JDBC驱动程序类必须是原始类加载器可见的 在客户端会话和所有执行者上。这是因为爪哇 Drivermanager类进行安全检查,导致IT忽略 当一个人去时,所有驱动程序都不可见 打开连接。这样做的一种便捷方法是修改 在所有工人节点上的compute_classpath.sh包括您的驱动程序罐。