mysql - 从远程计算机到 MySql 的 JDBC 连接

标签 mysql apache-spark jdbc

我已在 Linux VM(在 Windows 桌面中)中安装了 MySql,我正在尝试从在父 Windows 操作系统中运行的 Spark 应用程序连接到 MySql。连接时出现以下错误...

这是示例代码

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)

我已经更改了/etc/mysql/mysql.conf.d/mysqld.cnf 中的绑定(bind)地址属性。 我尝试了一些绑定(bind)地址选项 - linux VM IP, 0.0.0.0 并对其进行了完全注释。

到目前为止,所有选项都不起作用。

我的猜测是,我的 Windows 应用程序无法访问在虚拟机中运行的 MySql。

有人可以帮我解决这个问题吗?

提前致谢。

最佳答案

  1. 请检查主机是否可以通过mysql客户端连接到VM中的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")

关于mysql - 从远程计算机到 MySql 的 JDBC 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52517798/

相关文章:

mysql - Postgresql 查询用于在连接期间更新不同表中的多个列

python - 基于类似于 np.where 的字典替换 Spark DataFrame 中的列值

java - 在Java中调用存储过程

特定年份存储过程中的mysql总和计算

javascript - 将 mysql_fetch_array 中的 php 数据保存为脚本变量

mysql - 如何在 rails 中分配 AUTO_INCREMENT 值

java - SQLite 或 JDBC 奇怪的行为

java - Elasticsearch - 无法初始化 SSL - 证书问题

apache-spark - 流作业中窗口函数的性能不佳

Oracle10 和 JDBC : how to make CHAR ignore trailing spaces at comparision?