第一步:使用下面的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)')
答案 0 :(得分:0)
如果您的集群启用了“启用表访问控制并且仅允许Python和SQL命令”选项,那么您需要将端口1433放入Spark配置选项spark.databricks.pyspark.iptable.outbound.whitelisted.ports
的端口列表中(请参阅{{3 }}。
否则,您需要检查Databricks实例与SQL数据库之间的防火墙规则-端口1433缺少规则通常是导致此类错误的原因。执行
%sh
nc -zv your_sqlserver_host 1433
检查是否可以连接到服务器