You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从Azure Databricks及VM Spark Shell连接Azure SQL托管实例

解决Azure Databricks/VM Spark Shell连接Azure SQL托管实例的问题

我来帮你拆解这两个不同的连接故障,一步步给出修复方案:

一、Databricks集群的连接超时问题

报错提示TCP连接超时,说明Databricks的网络无法到达SQL托管实例的端点,核心是网络连通性问题,按以下步骤排查:

  • 检查网络访问配置
    根据你使用的托管实例访问方式调整:

    • 如果用公共端点:登录Azure门户,在SQL托管实例的防火墙规则里,添加Databricks集群的所有出站IP地址(可在Databricks集群详情页面获取),测试阶段也可以临时允许所有IP(生产环境不建议)。
    • 如果用私有端点:需要配置Databricks所在VNet和托管实例的VNet之间的对等连接(VNet Peering),同时确保双方的网络安全组(NSG)允许1433端口的双向流量,路由表配置正确。
    • 可以在Databricks中执行shell命令快速验证连通性:
      %sh nc -zv dev-migdb.nf53e3653n43.database.windows.net 1433
      
      如果返回超时或连接拒绝,说明网络层面确实存在阻塞,重点排查防火墙和VNet配置。
  • 确认端点信息正确性
    再次核对Azure门户中SQL托管实例的连接字符串,确保主机名、端口(默认1433)完全匹配代码中的参数,同时确认公共访问状态是否符合你的连接需求。


二、VM上Spark Shell的登录失败问题

报错显示Login failed for user 'db-devmigmgd@dev-migdb',这是因为JDBC驱动自动给SQL账号名拼接了@dev-migdb后缀,导致身份验证不匹配,修复方法如下:

  • 明确指定身份验证方式
    修改JDBC URL,添加authentication=SqlPassword参数,强制驱动使用SQL Server身份验证逻辑,避免自动拼接后缀:

    val jdbcUrl = s"jdbc:sqlserver://${jdbcHostname}:${jdbcPort};database=${jdbcDatabase};loginTimeout=90;authentication=SqlPassword"
    
  • 更新JDBC驱动版本
    旧版本的Microsoft JDBC Driver for SQL Server对Azure SQL托管实例的身份验证逻辑处理存在兼容问题,建议升级到12.0及以上版本,确保驱动能正确识别托管实例的身份验证规则。

  • 验证账号权限与防火墙
    虽然SSMS能正常登录,但仍需确认db-devmigmgd账号是否拥有MYDB数据库的访问权限,同时检查托管实例防火墙规则是否包含该VM的公网IP。


额外测试建议

不管是Databricks还是VM环境,都可以尝试在JDBC URL中直接嵌入用户密码(仅用于测试),排除Properties配置的潜在问题:

val jdbcUrl = s"jdbc:sqlserver://${jdbcHostname}:${jdbcPort};database=${jdbcDatabase};user=db-devmigmgd;password=pwd##321232123;loginTimeout=90;authentication=SqlPassword"
val employees_table = spark.read.jdbc(jdbcUrl, "employees", new Properties())

内容的提问来源于stack exchange,提问作者ankur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:05:37