连接到Azure Databricks中的Azure数据库时发生超时错误

时间:2020-11-02 18:44:46

标签: databricks azure-databricks

第一步:使用下面的Databricks脚本安装ODBC驱动程序

%sh 

curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list 
apt-get update
ACCEPT_EULA=Y apt-get install msodbcsql17
apt-get -y install unixodbc-dev
sudo apt-get install python3-pip -y
pip3 install --upgrade pyodbc

步骤2:尝试使用Active Directory集成身份验证连接到Azure数据库。

%python

import pyodbc
conn = pyodbc.connect( 'Driver={ODBC Driver 17 for SQL Server};Server=tcp:xxxxxxx.database.windows.net,1433;Database=xxxxxxx;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=60;Authentication=ActiveDirectoryIntegrated')
#result = conn.execute("select 1+1 as res")
result = conn.execute("select * from tablename")
print (result)
conn.close()

上面的Python代码在我的本地系统上运行良好,并且在Azure Databricks中执行时收到以下超时错误。请帮助解决这个问题。

OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')

1 个答案:

答案 0 :(得分:0)

如果您的集群启用了“启用表访问控制并且仅允许Python和SQL命令”选项,那么您需要将端口1433放入Spark配置选项spark.databricks.pyspark.iptable.outbound.whitelisted.ports的端口列表中(请参阅{{3 }}。

否则,您需要检查Databricks实例与SQL数据库之间的防火墙规则-端口1433缺少规则通常是导致此类错误的原因。执行

%sh

nc -zv your_sqlserver_host 1433

检查是否可以连接到服务器