JDBC-соединение с MySql с удаленной машины - PullRequest
0 голосов
/ 26 сентября 2018

Я установил MySql в виртуальной машине Linux (на рабочем столе Windows), я пытаюсь подключиться к MySql из приложения Spark, запущенного в родительской ОС Windows.При подключении я получаю ошибку ниже ...

Вот пример кода

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://VMIP:3306/TestDB", "dbtable" -> "Users", "user" -> "root", "password" -> "*****", "driver" -> "com.mysql.jdbc.Driver")

val dataRDD = spark.sqlContext.read.format("org.apache.spark.sql.jdbc").options(option).load()

}

Ошибка ...

Exception in thread "main" java.lang.NullPointerException
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:158)
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:29)
at com.Lab.SparkAPI.LoadMySql.main(LoadMySql.scala)

Я уже изменил свойство bind-address в /etc/mysql/mysql.conf.d/mysqld.cnf.Я пробовал несколько вариантов для bind-address - IP-адрес Linux linux, 0.0.0.0 и полное его комментирование.

Пока ни один из вариантов не работал.

Я предполагаю, что мое приложение для Windowsне удалось получить доступ к MySql, работающему на виртуальной машине.

Может ли кто-нибудь помочь мне решить эту проблему?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

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

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

  • GRANT ALL ON DBName. * TO "root" @ '%'IDENTIFIED BY' password ';
  • изменить /etc/mysql/mysql.conf.d/mysqld.cnf, чтобы комментировать # bind-address = 127.0.0.1 в разделе [mysqld]

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

0 голосов
/ 26 сентября 2018
  1. Пожалуйста, проверьте, может ли хост-машина подключаться к mysql в ВМ или нет через клиент mysql.

  2. Это параметры, которые можно применять в val option = Map() ::: https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JDBCOptions.scala

  val JDBC_URL = newOption("url")
  val JDBC_TABLE_NAME = newOption("dbtable")
  val JDBC_QUERY_STRING = newOption("query")
  val JDBC_DRIVER_CLASS = newOption("driver")
  val JDBC_PARTITION_COLUMN = newOption("partitionColumn")
  val JDBC_LOWER_BOUND = newOption("lowerBound")
  val JDBC_UPPER_BOUND = newOption("upperBound")
  val JDBC_NUM_PARTITIONS = newOption("numPartitions")
  val JDBC_QUERY_TIMEOUT = newOption("queryTimeout")
  val JDBC_BATCH_FETCH_SIZE = newOption("fetchsize")
  val JDBC_TRUNCATE = newOption("truncate")
  val JDBC_CASCADE_TRUNCATE = newOption("cascadeTruncate")
  val JDBC_CREATE_TABLE_OPTIONS = newOption("createTableOptions")
  val JDBC_CREATE_TABLE_COLUMN_TYPES = newOption("createTableColumnTypes")
  val JDBC_CUSTOM_DATAFRAME_COLUMN_TYPES = newOption("customSchema")
  val JDBC_BATCH_INSERT_SIZE = newOption("batchsize")
  val JDBC_TXN_ISOLATION_LEVEL = newOption("isolationLevel")
  val JDBC_SESSION_INIT_STATEMENT = newOption("sessionInitStatement")
  val JDBC_PUSHDOWN_PREDICATE = newOption("pushDownPredicate")
...