簡體   English   中英

Spark無法從SBT中找到JDBC驅動程序

[英]Spark Can't Find JDBC Driver from SBT

我正在嘗試在Scala Spark應用程序中使用JDBC,並且正在使用sbt進行編譯。 但是,當我添加Class.forName("com.mysql.jdbc.Driver") ,它將引發ClassNotFoundException。

我的sbt文件是這樣的:

name := "SparkApp"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.1.0"
libraryDependencies += "com.databricks" %% "spark-csv" % "1.5.0"
libraryDependencies += "org.apache.spark" %% "spark-mllib" % "2.1.0"
libraryDependencies += "mysql" % "mysql-connector-java" % "6.0.5"

據我所知,最后一行是添加JDBC驅動程序所需的全部,但它似乎沒有用。 我也嘗試過Class.forName("com.mysql.jdbc.Driver").newInstance()但是結果相同,因此我認為問題在於根本沒有正確添加jdbc類。

您無需提供類名即可使用JDBC加載數據幀。 遵循Spark SQL文檔 ,您只需提供"jdbc"作為數據源格式(並且確實將連接器添加為依賴項)並設置正確的選項:

val host: String = ???
val port: Int = ???
val database: String = ???
val table: String = ???
val user: String = ???
val password: String = ???

val options = Map(
      "url" -> s"jdbc:mysql://$host:$port/$database?zeroDateTimeBehavior=convertToNull",
      "dbtable" -> table,
      "user" -> user,
      "password" -> password)

val df = spark.read.format("jdbc").options(options).load()

當您將應用程序提交給Spark時,您必須在最終的jar文件中包含MySQL連接器,或者告訴spark-submit將該包作為依賴項獲取:

spark-submit --packages mysql:mysql-connector-java:6.0.5 ...

該標志還可以在spark-shellpyspark

您的mysql驅動程序類com.mysql.jdbc.Driver在運行時不在類路徑中。 如果您正在通過spark-submit運行您的spark作業,那么您至少有兩個選擇:

  • 提供--jar選項以指定mysql-*。jar的路徑(請參閱此文章 )(如果worker和driver都需要該類,則請仔細查看spark.executor.extraJavaOptionsspark.driver.extraJavaOptions
  • 構建一個超級jar(fat jar),它將在您的應用程序jar中包含您的mysql- *類(請參閱此帖子

spark-submit \\ --class com.mypack.MyClass \\ --master yarn --deploy-mode cluster \\ --conf spark.executor.extraClassPath=$POSTGRESQL_JAR_PATH:$MYSQL_JAR_PATH \\ --conf spark.driver.extraClassPath=$POSTGRESQL_JAR_PATH:$MYSQL_JAR_PATH \\

其中,應使用jar文件的hdfs路徑設置$POSTGRESQL_JAR_PATH$MYSQL_JAR_PATH

希望這可以幫助。

如果您正在集群模式下運行,則spark.executor.extraClassPath spark.driver.extraClassPath如果正在本地運行)。

我建議將兩個選項都設置為更安全。

在提交如下所示的spark作業時,您應該通過驅動程序jar:

1)spark-submit --jars mysql-connector-java-5.1.39.jar和您傳遞的其余參數

2)如果您只想使用shell spark-shell --jars嘗試在本地使用mysql-connector-java-5.1.39.jar

將驅動程序更新為您已經可用的驅動程序,並提供該驅動程序的絕對路徑

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM