Spark :无法找到JDBC驱动程序,如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (51)

因此,我一直在使用SBT和程序集将所有依赖项打包到一个JAR中,用于我的Spark任务。c3p0若要设置连接池信息,请广播该信息,然后使用foreachPartition然后在RDD上获取一个连接,并将数据插入数据库。

"mysql" % "mysql-connector-java" % "5.1.33"

这确保JDBC连接器与作业一起打包,一切都很好。

因此,最近我开始使用SparkSQL,并意识到简单地使用dataframe并将其保存到JDBC源代码中要容易得多1.3.0

我得到了以下例外:

java.sql.SQLException: No suitable driver found for jdbc:mysql://some.domain.com/myschema?user=user&password=password at java.sql.DriverManager.getConnection(DriverManager.java:596) at java.sql.DriverManager.getConnection(DriverManager.java:233)

当我在本地运行时,我通过设置

SPARK_CLASSPATH=/path/where/mysql-connector-is.jar

最终,我想知道的是,为什么这份工作不能找到驱动程序,而它应该与它一起打包呢?

提问于
用户回答回答于

spark驱动程序和执行器在类路径上都需要mysql驱动程序:

spark.driver.extraClassPath = <path>/mysql-connector-java-5.1.36.jar
spark.executor.extraClassPath = <path>/mysql-connector-java-5.1.36.jar
用户回答回答于

您是否将连接器驱动程序更新为最新版本?另外,在调用load()时是否指定了驱动程序类?

Map<String, String> options = new HashMap<String, String>();
options.put("url", "jdbc:mysql://localhost:3306/video_rcmd?user=root&password=123456");
options.put("dbtable", "video");
options.put("driver", "com.mysql.jdbc.Driver"); //here
DataFrame jdbcDF = sqlContext.load("jdbc", options); 

在SMARK/CONF/SMARK-defaults.conf中,还可以将scamk.driver.exClassPath和spack.Executor.exClassPath设置为MySQL驱动程序.jar的路径。

扫码关注云+社区

领取腾讯云代金券