无法使用 jdbc 和 spark 连接器从 databricks 集群连接到 Azure 数据库 for MySQL 服务器
Posted
技术标签:
【中文标题】无法使用 jdbc 和 spark 连接器从 databricks 集群连接到 Azure 数据库 for MySQL 服务器【英文标题】:Not able to connect to Azure database for MySQL server from databricks cluster using jdbc and spark connector 【发布时间】:2020-05-22 02:30:00 【问题描述】:我正在尝试使用 databricks 集群连接到 mysql 服务器的 Azure 数据库。 我尝试使用下面描述的 2 种方法-
使用 jdbc
val jdbcHostname = "<serverName>.mysql.database.azure.com"
val jdbcPort = 3306
val jdbcDatabase = "<db>"
val jdbcUrl = s"jdbc:mysql://$jdbcHostname:$jdbcPort/$jdbcDatabase?useSSL=true&requireSSL=false"
import java.sql.DriverManager
val connection = DriverManager.getConnection(jdbcUrl, "<user>@<serverName>", "<password>")
但我收到错误消息
"Client with IP address 'SOME_IP_ADDRESS' is not allowed to connect to this MySQL server"
我将此 ip 添加到 MySQL 服务器的 Azure 数据库的防火墙规则中,然后就可以访问了。但是每次集群重新启动时,IP地址都会发生变化并引发错误。
我不想在 mySQL 服务器中使用 "Allow access to Azure services"
,因为它也允许来自另一个订阅的用户。
使用 Spark 连接器 - 下载“com.microsoft.azure:azure-sqldb-spark:1.0.2”jar
val config = Config(Map(
"driver" -> "org.mariadb.jdbc.Driver",
"url" -> "<serverName>.mysql.database.azure.com:3306",
"databaseName" -> "<db>",
"dbTable" -> "<dbtable>",
"user" -> "<user>@<serverName>",
"password" -> "<password>"
))
val data = spark.read.sqlDB(config)
但它会抛出错误说
"java.lang.IllegalArgumentException: requirement failed: The driver could not open a JDBC connection. Check the URL: jdbc:sqlserver://<serverName>.mysql.database.azure.com:3306"
我也试过这种方式-
val df = spark.read.format("jdbc").option("driver", "org.mariadb.jdbc.Driver")
.option("url", "jdbc:mysql://<serverName>.mysql.database.azure.com:3306/<db>?useSSL=true&requireSSL=false")
.option("databaseName", "<db>")
.option("dbTable", "<dbtable>")
.option("user", "<user>@<serverName>")
.option("password", "<password>")
.load()
但它也会引发错误
"Client with IP address 'SOME_IP_ADDRESS' is not allowed to connect to this MySQL server"
【问题讨论】:
据我所知,spark连接器只支持azure SQL数据库和sql server。它不支持mysql。更多详情请参考docs.microsoft.com/en-us/azure/databricks/data/data-sources/… 嗨 Sonali Sharma,如果答案对您有帮助,请接受(标记)它作为答案。这对其他社区成员可能是有益的。谢谢。 【参考方案1】:Azure Databricks 中不支持将用于 MySQL 的 Azure SQL 数据库作为数据源。它不在列表中。
请参考:Data sources for Azure Databricks和@Jim Xu为您提供的文档。
希望这会有所帮助。
【讨论】:
以上是关于无法使用 jdbc 和 spark 连接器从 databricks 集群连接到 Azure 数据库 for MySQL 服务器的主要内容,如果未能解决你的问题,请参考以下文章
在 Spark SQL 中使用 Presto JDBC 时无法识别的连接属性“url”