【发布时间】:2015-06-15 15:54:43
【问题描述】:
所以我一直在使用 sbt 和程序集来将我的所有依赖项打包到一个 jar 中以用于我的 spark 作业。我有几项工作,我使用c3p0 设置连接池信息,将其广播出去,然后在RDD 上使用foreachPartition 获取连接,并将数据插入数据库。在我的 sbt 构建脚本中,我包含了
"mysql" % "mysql-connector-java" % "5.1.33"
这可确保 JDBC 连接器与作业打包在一起。一切都很好。
所以最近我开始使用 SparkSQL,并意识到使用 1.3.0 中的新功能将数据帧保存到 jdbc 源会更容易
我收到以下异常:
java.sql.SQLException:找不到合适的驱动程序 jdbc:mysql://some.domain.com/myschema?user=user&password=password at java.sql.DriverManager.getConnection(DriverManager.java:596) 在 java.sql.DriverManager.getConnection(DriverManager.java:233)
当我在本地运行它时,我通过设置绕过它
SPARK_CLASSPATH=/path/where/mysql-connector-is.jar
最终我想知道的是,为什么在应该打包的时候找不到驱动程序的工作?我的其他工作从来没有这个问题。据我所知,c3p0 和数据帧代码都使用了java.sql.DriverManager (它可以为您处理我所知道的所有内容),所以它应该可以正常工作?如果有什么东西阻止了组装方法的工作,我需要做什么才能使这个工作?
【问题讨论】:
-
您如何开展工作?您是否检查过您组装的 jar 是否包含 MySQL 驱动程序?
-
我确实检查了 jar,它确实包含 MySQL 驱动程序。我使用 bin/spark-submit --class "com.mypackage.MyJob" --verbose spark://place.where.this.exists.com:7077 MyJob.jar 启动我的工作
-
我有同样的问题,也在尝试保存到mysql。你有没有追根究底?
标签: jdbc apache-spark apache-spark-sql