【问题标题】:Spark MySql connector Jar [duplicate]Spark MySql 连接器 Jar [重复]
【发布时间】: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


【解决方案1】:

我想您正在使用 Scala 作为编程语言。您没有提供足够的信息,例如我们用于连接 MySQL 的代码。无论如何,您似乎没有为 MySQL 指定任何驱动程序。试试看:

  1. 将 MySQL 导入您的项目

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.39</version>
    </dependency>
    
  2. 创建Properties 对象,指定jdbc 驱动程序。然后,使用此对象向 MySQL 写入/读取数据。

    val prop = new Properties()
    
    prop.setProperty("user", dbUser)
    prop.setProperty("password", dbPassword)
    prop.put("driver", "com.mysql.jdbc.Driver");
    
    df.write.mode("append").jdbc("jdbc:mysql://" + dbHost + "/" + dbName + "?rewriteBatchedStatements=true", "TABLE_NAME", prop)
    

希望对你有帮助。

【讨论】:

  • 请不要在评论中发布这么长的代码示例。如果您更新您的问题会更好:) 无论如何,我的方法对您有用吗?
  • 我的项目中已经包含了jar文件,还不够吗?还是我需要按照你说的方式导入。
  • 在 Scala 项目中手动导入库不是一个好习惯,为此最好使用 Maven 或 SBT 等工具。无论如何,请确保该库已正确导入到项目中。
猜你喜欢
  • 2012-11-30
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 2014-02-02
相关资源
最近更新 更多