首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从远程机器到MySql的JDBC连接

从远程机器到MySql的JDBC连接
EN

Stack Overflow用户
提问于 2018-09-26 20:29:32
回答 2查看 397关注 0票数 0

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

以下是示例代码

代码语言:javascript
复制
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()

}

错误...

代码语言:javascript
复制
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-address - linux VM,0.0.0.0的选项,并且完全注释了它。

到目前为止,这些选项都不起作用。

我的猜测是,我的windows应用程序无法访问在VM中运行的MySql。

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

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-09-27 01:33:06

  1. 请检查主机是否可以通过mysql客户端连接到虚拟机中的mysql。以下是可以在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 =(“”) val= newOption("queryTimeout") val JDBC_BATCH_FETCH_SIZE = newOption("fetchsize") val JDBC_TRUNCATE =newOption(“截断”) 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 =(“batchsize”) val JDBC_TXN_ISOLATION_LEVEL = newOption("isolationLevel") val JDBC_SESSION_INIT_STATEMENT = newOption("sessionInitStatement") val JDBC_PUSHDOWN_PREDICATE =isolationLevel

票数 0
EN

Stack Overflow用户

发布于 2018-09-27 12:31:03

我终于可以远程连接MySQL了……

我做了以下两个设置...

在'password';

  • modify //mysql/mysql.conf.d/mysqld.cnf标识的根目录下,将绑定地址GRANT ALL ON DBName.* TO“
  • ”@‘%’添加到mysqld节

下的注释#bind-address = 127.0.0.1

这个问题的答案是here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52517798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档