Jar соединителя Spark MySql

Я подключаюсь к базе данных MySql из искрового приложения (spark-2.0.0-bin-hadoop2.7). При подключении я получаю сообщение об ошибке ниже.

Вот мой код:

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)

Я уже включил mysql-connector-java-5.1.27-bin.jar в свой проект eclipse через Добавить внешние банки.

Я пробовал пару разных версий jar, но пока не повезло.

Есть идеи, какая версия мне нужна для подключения к MySQL?


[редактировать]

Наконец-то я могу подключиться и загрузить данные из MySQL ...

Я сделал ниже 2 настройки ...

  • ПРЕДОСТАВИТЬ ВСЕ НА DBName. * TO "root" @ '%' ИДЕНТИФИЦИРОВАНО 'паролем';
  • измените /etc/mysql/mysql.conf.d/mysqld.cnf, чтобы добавить комментарий # bind-address = 127.0.0.1 в разделе [mysqld]

На этот вопрос дан ответ здесь

Не могли бы вы попробовать загрузить класс драйвера MySql точно перед тем, как вы вызываете DriverManager.getConnection

Rob 25.09.2018 07:43
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
1
1 429
1

Ответы 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)
    

Надеюсь, это поможет.

Пожалуйста, не размещайте здесь такой длинный пример кода в комментариях. Будет лучше, если вы обновите свой вопрос :) В любом случае, мой подход сработал для вас?

Álvaro Valencia 25.09.2018 14:24

Я включил файл jar в свой проект, этого недостаточно? Или мне нужно импортировать его так, как вы упомянули.

Shailesh 25.09.2018 14:33

Импорт вручную библиотек в проект Scala - не лучшая практика, для этой цели лучше использовать такие инструменты, как Maven или SBT. В любом случае убедитесь, что библиотека правильно импортирована в проект.

Álvaro Valencia 25.09.2018 14:40

Другие вопросы по теме