在 Azure 虚拟网络中部署 Azure Databricks(VNet 注入)

Azure Databricks 的默认部署是 Azure 上的完全托管式服务:所有经典计算平面资源(包括与所有群集关联的 VNet)都部署到锁定的资源组。 但如果需要自定义网络,则可以在自己的虚拟网络(有时称为 VNet 注入)中部署 Azure Databricks 经典计算平面资源,以便能够:

通过将 Azure Databricks 经典计算平面资源部署到你自己的 VNet,还可以利用灵活的 CIDR 范围。 对于 VNet,你可以使用 CIDR 范围大小 /16-/24。 对于子网,可使用小至 /26 的 IP 范围。 不支持更小的子网范围,例如 /27

重要

不能替换现有工作区的 VNet。 如果当前工作区无法容纳所需数量的活动群集节点,我们建议在较大的 VNet 中另外创建一个工作区。 按照这些详细的迁移步骤将资源(笔记本、群集配置、作业)从旧工作区复制到新工作区。

虚拟网络要求

要将 Azure Databricks 工作区部署到的 VNet 必须满足以下要求:

  • 区域: 该 VNet 必须与 Azure Databricks 工作区位于同一区域。

  • 订阅: 该 VNet 必须与 Azure Databricks 工作区属于同一订阅。

  • 地址空间:VNet 的 CIDR 块范围为从 /24,两个子网(容器子网和主机子网)的 CIDR 块最大可以为 /26。 若要查看有关基于 VNet 及其子网的大小的最大群集节点数的指导,请参阅地址空间和最大群集节点数

  • 子网: VNet 必须包括两个专用于 Azure Databricks 工作区的子网:一个容器子网(有时称为专用子网)和一个主机子网(有时称为公共子网)。 但是,对于使用安全群集连接的工作区,容器子网和主机子网都是专用的。 不支持跨工作区共享子网或在 Azure Databricks 工作区使用的子网上部署其他 Azure 资源。 若要查看有关基于 VNet 及其子网的大小的最大群集节点数的指导,请参阅地址空间和最大群集节点数

    • 如果使用 Azure 门户创建 Azure Databricks 工作区,请选择使用 VNet 中的现有子网,或者创建两个通过名称和 IP 范围指定的新子网。
    • 如果使用全功能 ARM 模板仅限 VNet 的 ARM 模板,则模板会为你创建子网。 在这两种情况下,子网会在工作区部署之前委托给 Microsoft.Databricks/workspaces 资源提供程序,使 Azure Databricks 能够创建Microsoft.Databricks/workspaces。 如果我们需要添加或更新 Azure Databricks 管理的 NSG 规则的范围,Azure Databricks 会提前通知你。
    • 如果使用工作区 ARM 模板或自定义 ARM 模板,请确保工作区的两个子网使用同一网络安全组并进行了适当的委托。 请参阅添加或删除子网委托

    重要

    这些子网和 Azure Databricks 工作区之间存在一对一关系。 不能在单个子网中共享多个工作区。 不支持跨工作区共享子网或在 Azure Databricks 工作区使用的子网上部署其他 Azure 资源。

若要详细了解用于配置 VNet 和部署工作区的模板,请参阅 Azure Databricks 提供的 Azure 资源管理器模板

地址空间和最大群集节点数

具有较小虚拟网络的工作区比具有较大虚拟网络的工作区会更快地用完 IP 地址(网络空间)。 可使用的 VNet 的 CIDR 块范围为 /16/24,两个子网(容器子网和主机子网)的 CIDR 块最大可以为 /26

注意

你可以针对子网创建最大 /28 的 CIDR 块,但 Databricks 不建议使用小于 /26 的子网。

VNet 地址空间的 CIDR 范围会影响工作区可以使用的群集节点的最大数目:

  • Azure Databricks 工作区需要 VNet 中的两个子网:容器子网(也称为专用子网)和主机子网(也称为公共子网)。 如果工作区使用安全群集连接,则容器子网和主机子网都是专用的。
  • Azure 在每个子网中预留 5 个 IP
  • 在每个子网中,Azure Databricks 要求每个群集节点有 1 个 IP 地址。 每个群集节点总共有两个 IP:主机子网中的主机有一个 IP 地址,容器子网中的容器有一个 IP 地址。
  • 你可能不希望使用 VNet 的所有地址空间。 例如,你可能想要在一个 VNet 中创建多个工作区。 由于不能跨工作区共享子网,因此你可能希望子网不要用完 VNet 的地址空间。
  • 必须为 VNet 地址空间中的两个新子网分配地址空间,并且这个分配的地址空间不得与该 VNet 中当前子网或未来子网的地址空间重叠。

下表显示了基于网络大小的最大子网大小。 此表假定不存在占用地址空间的其他子网。 如果你有预先存在的子网或要为其他子网预留地址空间,请使用较小的子网:

VNet 地址空间 (CIDR) 最大 Azure Databricks 子网大小 (CIDR),假定没有其他子网
/16 /17
/17 /18
/18 /19
/20 /21
/21 /22
/22 /23
/23 /24
/24 /25

若要根据子网大小查找最大群集节点数,请使用下表。 “每个子网的 IP 地址数”列包含 Azure 预留的 5 个 IP 地址。 最右边的列表示可以同时在已预配了该大小的子网的工作区中运行的群集节点的数目。

子网大小 (CIDR) 每个子网的 IP 地址数 最大 Azure Databricks 群集节点数
/17 32768 32763
/18 16384 16379
/19 8192 8187
/20 4096 4091
/21 2048 2043
/22 1024 1019
/23 512 507
/24 256 251
/25 128 123
/26 64 59

使用安全群集连接时的出口 IP 地址

如果在使用 VNet 注入的工作区上启用安全群集连接,Databricks 建议工作区具有稳定的出口公共 IP。

稳定的出口公共 IP 地址非常有用,因为你可以将它们添加到外部允许列表。 例如,若要使用稳定的传出 IP 地址从 Azure Databricks 连接到 Salesforce。

警告

Azure 宣布将于 2025 年 9 月 30 日停用 Azure 中虚拟机的默认出站访问连接。 请参阅此公告。 这意味着使用默认出站访问(而不是稳定的出口公共 IP)的现有 Azure Databricks 工作区在该日期后可能无法继续工作。 Databricks 建议在该日期之前为工作区添加显式出站方法。

有关实现选项,请参阅安全群集连接

共享资源和对等互连

如果需要 DNS 等共享网络资源,Databricks 强烈建议遵循中心辐射型模型的 Azure 最佳做法。 使用 VNet 对等互连将工作区 VNet 的专用 IP 空间扩展到中心,同时使分支彼此隔离。

如果 VNet 中有其他资源,或者使用对等互连,Databricks 强烈建议将拒绝规则添加到网络安全组 (NSG),其中这些网络安全组附加到同一 VNet 中或与该 VNet 对等互连的其他网络和子网。 为入站和出站连接添加到连接拒绝规则,以便限制到 Azure Databricks 计算资源和来自这些资源的连接。 如果群集需要访问网络上的资源,请添加规则以仅允许满足要求所需的最小访问权限。

相关信息,请参阅网络安全组规则

使用 Azure 门户创建 Azure Databricks 工作区

此部分介绍如何在 Azure 门户中创建 Azure Databricks 工作区并将其部署到你现有的 VNet 中。 Azure Databricks 会根据指定的 CIDR 范围,使用两个新的子网(如果尚不存在)来更新 VNet。 该服务还使用新的网络安全组来更新子网,配置入站和出站规则,最后将工作区部署到已更新的 VNet。 如果想要更多地控制 VNet 的配置,请使用 Azure Databricks 提供的 Azure 资源管理器 (ARM) 模板,而不使用门户 UI。 例如,使用现有的网络安全组或创建你自己的安全规则。 请参阅使用 Azure 资源管理器模板的高级配置

重要

必须为创建工作区的用户分配相应虚拟网络的“网络参与者”角色,或分配自定义角色(已为其分配 Microsoft.Network/virtualNetworks/subnets/join/actionMicrosoft.Network/virtualNetworks/subnets/write 权限)。

必须配置一个 VNet,以便将 Azure Databricks 工作区部署到其中。 可以使用现有的 VNet,也可以创建新的 VNet,但此 VNet 必须与你计划创建的 Azure Databricks 工作区位于同一区域和订阅中。 设置 VNet 大小时,CIDR 范围必须为 /16 到 /24。 有关详细信息,请参阅虚拟网络要求

配置工作区时,请使用现有子网,或者使用新子网,但需指定名称和 IP 范围。

  1. 在 Azure 门户中,选择“+ 创建资源”“分析”>“Azure Databricks”或搜索 Azure Databricks,然后单击“创建”或“+ 添加”以启动“Azure Databricks 服务”对话框。

  2. 按照在你自己的 VNet 中创建 Azure Databricks 工作区快速入门中所述的配置步骤操作。

  3. 在“网络”选项卡中,选择要在“虚拟网络”字段中使用的 VNet。

    重要

    如果未在选取器中看到网络名称,请确认为工作区指定的 Azure 区域是否与所需 VNet 的 Azure 区域匹配。

    选择虚拟网络

  4. 为子网命名,并在其大小最大为 /26 的块中提供 CIDR 范围。 若要查看有关基于 VNet 及其子网的大小的最大群集节点数的指导,请参阅地址空间和最大群集节点数

    重要

    部署工作区后,无法更改子网 CIDR 范围。

    • 若要指定现有子网,请指定现有子网的确切名称。 使用现有子网时,还应将工作区创建表单中的 IP 范围设置为与现有子网的 IP 范围完全匹配。
    • 若要创建新子网,请指定该 VNet 中尚不存在的子网名称。 将创建具有指定 IP 范围的子网。 你必须指定在 VNet 的 IP 范围内的 IP 范围,不得指定已分配给现有子网的 IP 范围。

    重要

    Azure Databricks 要求子网名称不超过 80 个字符。 这比 Azure 门户中子网可用的最大长度短。 使用现有子网之前,如果其名称比 80 个字符长,请对其重命名。

    子网会获得关联的网络安全组规则,这些规则包括允许群集内部通信的规则。 Azure Databricks 将拥有通过 Microsoft.Databricks/workspaces 资源提供程序更新两个子网的委托权限。 这些权限仅适用于 Azure Databricks 所需的网络安全组规则,而不适用于你添加的其他网络安全组规则或所有网络安全组中所包含的默认网络安全组规则。

  5. 单击“创建”,以将 Azure Databricks 工作区部署到 VNet。

    注意

    当工作区部署失败时,仍然会创建工作区,但其状态为失败。 删除失败的工作区,并创建一个解决部署错误的新工作区。 删除失败的工作区时,托管资源组和任何成功部署的资源也将被删除。

使用 Azure 资源管理器模板的高级配置

如果想要更多地控制对 VNet 的配置,请使用以下 Azure 资源管理器 (ARM) 模板,而不要使用基于门户 UI 的自动 VNet 配置和工作区部署。 例如,使用现有的子网、现有的网络安全组,或添加你自己的安全规则。

如果使用自定义 Azure 资源管理器模板或用于 Azure Databricks VNet 注入的工作区模板将工作区部署到现有 VNet,则必须创建主机子网和容器子网,将网络安全组附加到每个子网,并在部署工作区之前将子网委托给 Microsoft.Databricks/workspaces 资源提供程序。 部署的每个工作区必须拥有一对单独的子网。

全功能模板

若要使用一个模板来创建 VNet 和 Azure Databricks 工作区,请使用适用于 Azure Databricks VNet 注入工作区的全功能模板

虚拟网络模板

若要使用一个模板来创建具有适当子网的 VNet,请使用适用于 Databricks VNet 注入的 VNet 模板

Azure Databricks 工作区模板

若要使用一个模板将 Azure Databricks 工作区部署到现有的 VNet,请使用适用于 Azure Databricks VNet 注入的工作区模板

使用工作区模板可以指定现有的 VNet 并使用现有的子网:

  • 部署的每个工作区必须拥有一对单独的主机/容器子网。 不支持跨工作区共享子网或在 Azure Databricks 工作区使用的子网上部署其他 Azure 资源。

  • 在使用此 Azure 资源管理器模板部署工作区之前,VNet 的主机子网和容器子网必须附加网络安全组,并且必须将其委托给 Microsoft.Databricks/workspaces 服务。

  • 若要创建其子网已进行适当委托的 VNet,请使用适用于 Databricks VNet 注入的 VNet 模板

  • 若要在尚未委托主机子网和容器子网的情况下使用现有的 VNet,请参阅添加或删除子网委托

网络安全组规则

下表显示了 Azure Databricks 使用的最新网络安全组规则。 如果 Azure Databricks 需要添加规则或更改此列表中现有规则的范围,你将收到预先通知。 每当发生此类修改时,本文和各表都会更新。

本节内容:

Azure Databricks 如何管理网络安全组规则

下面各部分列出的 NSG 规则表示 Azure Databricks 通过将 VNet 的主机子网和容器子网委托给 Microsoft.Databricks/workspaces 服务,在 NSG 中自动预配和管理的规则。 你无权更新或删除这些 NSG 规则;子网委托会阻止任何更新或删除操作。 Azure Databricks 必须拥有这些规则才能确保 Azure 能够在 VNet 中可靠地运行和支持 Azure Databricks 服务。

其中一些 NSG 规则将 VirtualNetwork 指定为源和目标。 在 Azure 中缺少子网级服务标记的情况下,这样做可以简化设计。 所有群集都在内部受到第二层网络策略的保护,这样群集 A 就无法连接到同一工作区中的群集 B。 如果工作区部署到同一个由客户管理的 VNet 中的一对不同的子网中,则这也适用于多个工作区。

重要

Databricks 强烈建议将拒绝规则添加到网络安全组 (NSG),其中这些网络安全组附加到同一 VNet 中或与该 VNet 对等互连的其他网络和子网。 为入站和出站连接添加到连接拒绝规则,以便限制到 Azure Databricks 计算资源和来自这些资源的连接。 如果群集需要访问网络上的资源,请添加规则以仅允许满足要求所需的最小访问权限。

2020 年 1 月 13 日之后创建的工作区的网络安全组规则

本部分中的信息仅适用于在 2020 年 1 月 13 日之后创建的 Azure Databricks 工作区。 如果工作区是在 2020 年 1 月 13 日发布安全群集连接 (SCC) 之前创建的,请参阅下一部分。

重要

此表列出两个仅在禁用安全群集连接 (SCC) 的情况下包含的入站安全组规则。

方向 协议 Source Port 目标 Dest Port 已使用
入站 任意 VirtualNetwork 任意 VirtualNetwork 任意 默认
入站 TCP AzureDatabricks(服务标记)
仅当 SCC 已禁用
任意 VirtualNetwork 22 公共 IP
入站 TCP AzureDatabricks(服务标记)
仅当 SCC 已禁用
任意 VirtualNetwork 5557 公共 IP
出站 TCP VirtualNetwork 任意 AzureDatabricks(服务标记) 443, 3306, 8443-8451 默认
出站 TCP VirtualNetwork 任意 SQL 3306 默认
出站 TCP VirtualNetwork 任意 存储 443 默认
出站 任意 VirtualNetwork 任意 VirtualNetwork 任意 默认
出站 TCP VirtualNetwork 任意 EventHub 9093 默认

注意

如果限制出站规则,Databricks 建议打开端口 111 和 2049 来启用某些库安装。

2020 年 1 月 13 日之前创建的工作区的网络安全组规则

本部分中的信息仅适用于在 2020 年 1 月 13 日之前创建的 Azure Databricks 工作区。 如果工作区是在 2020 年 1 月 13 日当天或之后创建的,请参阅前面的部分。

方向 协议 Source Port 目标 Dest Port 已使用
入站 任意 VirtualNetwork 任意 VirtualNetwork 任意 默认
入站 TCP ControlPlane IP 任意 VirtualNetwork 22 公共 IP
入站 TCP ControlPlane IP 任意 VirtualNetwork 5557 公共 IP
出站 TCP VirtualNetwork 任意 Webapp IP 443 默认
出站 TCP VirtualNetwork 任意 SQL 3306 默认
出站 TCP VirtualNetwork 任意 存储 443 默认
出站 任意 VirtualNetwork 任意 VirtualNetwork 任意 默认
出站 TCP VirtualNetwork 任意 EventHub 9093 默认

重要

Azure Databricks 是部署在全局 Azure 公有云基础结构上的 Microsoft 第一方服务。 服务组件之间的所有通信(包括控制平面和客户计算平面中的公共 IP 之间的通信)都留在 Microsoft Azure 网络主干内进行。

故障排除

工作区创建错误

子网<subnet-id>需要以下任意委托 [Microsoft.Databricks/workspaces] 来引用服务关联链接

可能的原因:创建工作区时所在的 VNet 的主机子网和容器子网尚未委托给 Microsoft.Databricks/workspaces 服务。 每个子网必须附加并正确委托网络安全组。 有关详细信息,请参阅虚拟网络要求

子网<subnet-id>已被工作区<workspace-id>占用

可能的原因:创建工作区时所在的 VNet 的主机子网和容器子网已经被现有 Azure Databricks 工作区占用。 不能在单个子网中共享多个工作区。 部署的每个工作区必须拥有一对新的主机子网和容器子网。

故障排除

实例不可访问:无法通过 SSH 访问资源。

可能的原因:阻止了从控制平面到辅助角色的流量。 如果要部署到已连接到本地网络的现有 VNet,请根据将 Azure Databricks 工作区连接到本地网络中提供的信息检查安装情况。

意外的启动失败:设置群集时遇到意外错误。 请重试,如果问题仍然存在,请联系 Azure Databricks。 内部错误消息:Timeout while placing node

可能的原因:从辅助角色到 Azure 存储终结点的流量被阻止。 如果使用自定义 DNS 服务器,请同时检查 VNet 中 DNS 服务器的状态。

云提供程序启动失败:在设置群集时遇到云提供程序错误。 请参阅 Azure Databricks 指南以获取详细信息。 Azure 错误代码:AuthorizationFailed/InvalidResourceReference.

可能的原因:VNet 或子网不再存在。 请确保 VNet 和子网存在。

群集已终止。 原因:Spark 启动失败:Spark 未能及时启动。 此问题可能是由 Hive 元存储发生故障、Spark 配置无效或初始化脚本出现故障而导致的。 请参阅 Spark 驱动程序日志来排查此问题,如果问题仍然存在,请联系 Databricks。 内部错误消息:Spark failed to start: Driver failed to start in time

可能的原因:容器无法与托管实例或 DBFS 存储帐户通信。 解决方法是为 DBFS 存储帐户添加指向子网的自定义路由,并将下一个跃点设为 Internet。