【发布时间】:2019-03-02 05:39:38
【问题描述】:
我已经在 Linux 虚拟机(在 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 中的绑定地址属性。 我尝试了一些绑定地址的选项 - linux VM IP, 0.0.0.0 并完全评论它。
到目前为止,没有一个选项有效。
我的猜测是,我的 Windows 应用程序无法访问在 VM 中运行的 MySql。
有人可以帮我解决这个问题吗?
提前致谢。
【问题讨论】:
-
您的问题似乎与连接无关(否则我预计会出现这种性质的 SQLException)。
-
这可能是由于防火墙阻止了与 MySql 的连接。
-
不太可能,因为这会导致 SQLException(例如通信链路故障)。
-
我什至无法从 Windows 桌面使用 MySQL 客户端进行连接,我收到您的用户“root”从您的主机到 MyIP 的服务器的连接尝试失败:3306:不允许主机“MyIP”连接到这个 MySQL
标签: mysql apache-spark jdbc