教程:从 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 虚拟机

  1. 在 Azure 门户中,选择“虚拟机”的图标。 然后选择“+ 添加”

    Add new Azure virtual machine

  2. 在“基本信息”选项卡上,选择 Ubuntu Server 18.04 LTS 并将 VM 大小更改为 B2。 选择管理员用户名和密码。

    Basics tab of new virtual machine configuration

  3. 导航到“网络”选项卡。选择虚拟网络和包含 Azure Databricks 群集的公共子网。 选择“查看 + 创建”选项卡,然后选择“创建”以部署虚拟机 。

    Networking tab of new virtual machine configuration

  4. 部署完成后,导航到虚拟机。 请注意“概述”中的公共 IP 地址和虚拟网络/子网。 选择“公共 IP 地址”

    Virtual machine overview

  5. 将“分配”更改为“静态”并输入“DNS 名称标签” 。 选择“保存”并重启虚拟机。

    Public IP Address configuration

  6. 在“设置”下选择“网络”选项卡。 请注意,在 Azure Databricks 部署过程中创建的网络安全组与虚拟机关联。 选择“添加入站端口规则”。

  7. 添加规则,为 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 为规则指定名称。

    Add inbound security rule for port 22

  8. 添加一条规则,以便使用以下设置为 SQL 打开端口 1433:

    设置 建议值 说明
    任意 源指定此规则将允许或拒绝来自特定源 IP 地址的传入流量。
    源端口范围 * 允许来自任何端口的流量。
    目标 IP 地址 IP 地址指定此规则将允许或拒绝来自特定源 IP 地址的传出流量。
    目标 IP 地址 <VM 公共 IP> 输入虚拟机的公共 IP 地址。 可在虚拟机的“概述”页找到此地址。
    目标端口范围 1433 为 SQL Server 打开端口 22。
    优先度 300 为规则指定优先级。
    名称 sql-databricks-tutorial-vm 为规则指定名称。

    Add inbound security rule for port 1433

在 Docker 容器中运行 SQL Server

  1. 打开用于 Windows 的 Ubuntu,或者其他任何允许你通过 SSH 登录虚拟机的工具。 导航到 Azure 门户中的虚拟机,然后选择“连接”以获取连接所需的 SSH 命令。

    Connect to virtual machine

  2. 在 Ubuntu 终端中输入命令,然后输入在配置虚拟机时创建的管理员密码。

    Ubuntu terminal SSH sign in

  3. 使用以下命令在虚拟机上安装 Docker。

    sudo apt-get install docker.io
    

    使用以下命令验证 Docker 的安装:

    sudo docker --version
    
  4. 安装映像。

    sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
    

    检查映像。

    sudo docker images
    
  5. 从映像运行容器。

    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 数据库

  1. 打开 SQL Server Management Studio 并使用服务器名和 SQL 身份验证连接到服务器。 登录用户名是 SA,密码是 Docker 命令中设置的密码。 示例命令中的密码为 Password1234

    Connect to SQL Server using SQL Server Management Studio

  2. 成功连接后,选择“新建查询”,然后输入以下代码片段以创建数据库、表,并在表中插入一些记录。

    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
    

    Query to create a SQL Server database

从 Azure Databricks 查询 SQL Server

  1. 导航到 Azure Databricks 工作区,并验证是否已按照先决条件的要求创建了一个群集。 然后选择“创建笔记本”。 为笔记本指定一个名称,选择 Python 作为语言,然后选择创建的群集。

    New Databricks notebook settings

  2. 使用以下命令对 SQL Server 虚拟机的内部 IP 地址执行 ping 操作。 此 ping 操作应会成功。 如果不成功,请验证容器是否正在运行,并查看网络安全组 (NSG) 配置。

    %sh
    ping 10.179.64.4
    

    还可以使用 nslookup 命令进行查看。

    %sh
    nslookup databricks-tutorial-vm.westus2.cloudapp.azure.com
    
  3. 成功对 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 工作区,请使用以下步骤删除在本教程中创建的所有资源:

  1. 在 Azure 门户的左侧菜单中,单击“资源组”,并单击所创建的资源的名称。

  2. 在资源组页上选择“删除”,在文本框中键入要删除的资源的名称,然后再次选择“删除” 。

后续步骤

请继续学习下一篇文章,了解如何使用 Azure Databricks 提取、转换和加载数据。