【发布时间】:2019-02-28 15:20:23
【问题描述】:
我正在从 spark 应用程序 (spark-2.0.0-bin-hadoop2.7) 连接到 MySql DB。连接时出现以下错误。
这是我的代码:
def main(args: Array[String]) {
val conf = new SparkConf()
.setAppName("LoadMySql")
.setMaster("local[*]")
.set("spark.sql.warehouse.dir", "file:///C:/temp")
val spark = SparkSession
.builder
.config(conf)
.getOrCreate()
val option = Map("url" -> "jdbc://mysql://IPAddress:3306/TestDB", "dbtable" -> "Users", "user" -> "root", "password" -> "*****")
val dataRDD = spark.sqlContext.read.format("org.apache.spark.sql.jdbc").options(option).load()
错误:
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Exception in thread "main" java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(Unknown Source)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$2.apply(JdbcUtils.scala:54)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$2.apply(JdbcUtils.scala:54)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.createConnectionFactory(JdbcUtils.scala:53)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:123)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.<init>(JDBCRelation.scala:117)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:53)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:315)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:149)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:122)
at com.Lab.SparkAPI.LoadMySql$.main(LoadMySql.scala:26)
at com.Lab.SparkAPI.LoadMySql.main(LoadMySql.scala)
我已经通过 Add External Jars 将 mysql-connector-java-5.1.27-bin.jar 包含到我的 eclipse 项目中。
我尝试了几个不同版本的 jar,但到目前为止没有运气。
知道我需要哪个版本连接到 MySQL?
[编辑]
我终于可以从 MySQL 连接和加载数据了...
我做了以下 2 个设置...
- GRANT ALL ON DBName.* TO "root"@'%' IDENTIFIED BY 'password';
- 修改/etc/mysql/mysql.conf.d/mysqld.cnf在[mysqld]部分下注释#bind-address = 127.0.0.1
此问题已回答here
【问题讨论】:
-
您可以尝试在调用 DriverManager.getConnection 之前加载 MySql 驱动程序类
标签: mysql apache-spark jdbc