我正在尝试使用 databricks 群集连接到 MySQL 服务器的 Azure 数据库。 我尝试使用下面描述的两种方法-
使用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 添加到 Azure Database for MySQL 服务器的防火墙规则中,然后就可以访问了。但每次集群重新启动时,IP 地址都会发生变化并引发错误。
我不想"Allow access to Azure services"
在 mySQL 服务器中,因为它也将允许来自另一个订阅的用户。
使用 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"
最佳答案
不支持将 MySQL 的 Azure SQL 数据库作为 Azure Databricks 中的数据源。它不在列表中。
请引用:Data sources for Azure Databricks以及 @Jim Xu 为您提供的文档。
希望这有帮助。
关于mysql - 无法使用 jdbc 和 Spark 连接器从 databricks 群集连接到 Azure Database for MySQL 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60088273/