教程:从 Azure Databricks 笔记本查询虚拟网络中的 SQL Server Linux Docker 容器
本教程介绍如何将 Azure Databricks 与虚拟网络中的 SQL Server Linux Docker 容器集成。
在本教程中,你将了解如何执行以下操作:
- 将 Azure Databricks 工作区部署到虚拟网络
- 在公用网络中安装 Linux 虚拟机
- 安装 Docker
- 安装 Linux 上的 Microsoft SQL Server docker 容器
- 使用 Databricks 笔记本中的 JDBC 查询 SQL Server
先决条件
创建 Linux 虚拟机
在 Azure 门户中,选择“虚拟机”的图标。 然后选择“+ 添加”。
在“基本信息”选项卡上,选择 Ubuntu Server 18.04 LTS 并将 VM 大小更改为 B2。 选择管理员用户名和密码。
导航到“网络”选项卡。选择虚拟网络和包含 Azure Databricks 群集的公共子网。 选择“查看 + 创建”选项卡,然后选择“创建”以部署虚拟机 。
部署完成后,导航到虚拟机。 请注意“概述”中的公共 IP 地址和虚拟网络/子网。 选择“公共 IP 地址”
将“分配”更改为“静态”并输入“DNS 名称标签” 。 选择“保存”并重启虚拟机。
在“设置”下选择“网络”选项卡。 请注意,在 Azure Databricks 部署过程中创建的网络安全组与虚拟机关联。 选择“添加入站端口规则”。
添加规则,为 SSH 打开端口 22。 使用以下设置:
设置 建议值 说明 源 IP 地址 IP 地址指定此规则将允许或拒绝来自特定源 IP 地址的传入流量。 源 IP 地址 <公共 IP> 输入公共 IP 地址。 可通过访问 bing.com 并搜索我的 IP来找到公共 IP 地址。 源端口范围 * 允许来自任何端口的流量。 目标 IP 地址 IP 地址指定此规则将允许或拒绝来自特定源 IP 地址的传出流量。 目标 IP 地址 <VM 公共 IP> 输入虚拟机的公共 IP 地址。 可在虚拟机的“概述”页找到此地址。 目标端口范围 22 为 SSH 打开端口 22。 优先度 290 为规则指定优先级。 名称 ssh-databricks-tutorial-vm 为规则指定名称。 添加一条规则,以便使用以下设置为 SQL 打开端口 1433:
设置 建议值 说明 源 任意 源指定此规则将允许或拒绝来自特定源 IP 地址的传入流量。 源端口范围 * 允许来自任何端口的流量。 目标 IP 地址 IP 地址指定此规则将允许或拒绝来自特定源 IP 地址的传出流量。 目标 IP 地址 <VM 公共 IP> 输入虚拟机的公共 IP 地址。 可在虚拟机的“概述”页找到此地址。 目标端口范围 1433 为 SQL Server 打开端口 22。 优先度 300 为规则指定优先级。 名称 sql-databricks-tutorial-vm 为规则指定名称。
在 Docker 容器中运行 SQL Server
打开用于 Windows 的 Ubuntu,或者其他任何允许你通过 SSH 登录虚拟机的工具。 导航到 Azure 门户中的虚拟机,然后选择“连接”以获取连接所需的 SSH 命令。
在 Ubuntu 终端中输入命令,然后输入在配置虚拟机时创建的管理员密码。
使用以下命令在虚拟机上安装 Docker。
sudo apt-get install docker.io
使用以下命令验证 Docker 的安装:
sudo docker --version
安装映像。
sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
检查映像。
sudo docker images
从映像运行容器。
sudo docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Password1234' -p 1433:1433 --name sql1 -d mcr.microsoft.com/mssql/server:2017-latest
验证容器是否正在运行。
sudo docker ps -a
创建 SQL 数据库
打开 SQL Server Management Studio 并使用服务器名和 SQL 身份验证连接到服务器。 登录用户名是 SA,密码是 Docker 命令中设置的密码。 示例命令中的密码为
Password1234
。成功连接后,选择“新建查询”,然后输入以下代码片段以创建数据库、表,并在表中插入一些记录。
CREATE DATABASE MYDB; GO USE MYDB; CREATE TABLE states(Name VARCHAR(20), Capitol VARCHAR(20)); INSERT INTO states VALUES ('Delaware','Dover'); INSERT INTO states VALUES ('South Carolina','Columbia'); INSERT INTO states VALUES ('Texas','Austin'); SELECT * FROM states GO
从 Azure Databricks 查询 SQL Server
导航到 Azure Databricks 工作区,并验证是否已按照先决条件的要求创建了一个群集。 然后选择“创建笔记本”。 为笔记本指定一个名称,选择 Python 作为语言,然后选择创建的群集。
使用以下命令对 SQL Server 虚拟机的内部 IP 地址执行 ping 操作。 此 ping 操作应会成功。 如果不成功,请验证容器是否正在运行,并查看网络安全组 (NSG) 配置。
%sh ping 10.179.64.4
还可以使用 nslookup 命令进行查看。
%sh nslookup databricks-tutorial-vm.chinaeast2.cloudapp.chinacloudapi.cn
成功对 SQL Server 执行 ping 操作后,即可查询数据库和表。 运行以下 Python 代码:
jdbcHostname = "10.179.64.4" jdbcDatabase = "MYDB" userName = 'SA' password = 'Password1234' jdbcPort = 1433 jdbcUrl = "jdbc:sqlserver://{0}:{1};database={2};user={3};password={4}".format(jdbcHostname, jdbcPort, jdbcDatabase, userName, password) df = spark.read.jdbc(url=jdbcUrl, table='states') display(df)
清理资源
若不再需要资源组、Azure Databricks 工作区以及所有相关资源,请将其删除。 删除作业可避免产生不必要的计费。 若计划将来使用 Azure Databricks 工作区,则可停止群集并在以后重启。 如果不打算继续使用此 Azure Databricks 工作区,请使用以下步骤删除在本教程中创建的所有资源:
在 Azure 门户的左侧菜单中,单击“资源组”,并单击所创建的资源的名称。
在资源组页上选择“删除”,在文本框中键入要删除的资源的名称,然后再次选择“删除” 。
后续步骤
请继续学习下一篇文章,了解如何使用 Azure Databricks 提取、转换和加载数据。