配置群集

注意

这些是旧版创建群集 UI 的说明,此处仅为保持历史记录准确性而包含该信息。 所有客户都应使用更新的创建群集 UI

本文介绍创建和编辑 Azure Databricks 群集时可用的配置选项。 它侧重于说明如何使用 UI 创建和编辑群集。 有关其他方法,请参阅 Databricks CLI群集 APIDatabricks Terraform 提供程序

有关确定最适合你的需求的配置选项组合的帮助,请参阅群集配置最佳做法

创建群集

群集策略

群集策略基于一组规则限制配置群集的能力。 策略规则会限制可用于创建群集的属性或属性值。 群集策略的 ACL 可以将策略的使用限制到特定用户和组,因此可以限制你在创建群集时可选择的策略。

若要配置群集策略,请在“策略”下拉列表中选择群集策略。

选择群集策略

注意

如果尚未在工作区中创建任何策略,则不会显示“策略”下拉列表。

如果你有以下权限,则可执行相应的操作:

  • 如果有群集创建权限,则可选择“无限制”策略,并创建可以充分配置的群集。 “无限制”策略不限制任何群集属性或属性值。
  • 如果有群集创建权限和群集策略访问权限,则可选择“无限制”策略和你有权访问的策略。
  • 如果只有群集策略访问权限,则可选择你有权访问的策略。

群集模式

注意

本文介绍旧版群集 UI。 有关新群集 UI(预览版)的信息,请参阅计算配置参考。 其中包括群集访问类型和模式的一些术语更改。 有关新群集类型和旧群集类型的比较,请参阅群集 UI 更改和群集访问模式。 在预览 UI 中:

  • 标准模式群集现在称为无隔离共享访问模式群集。
  • 表 ACL 的高并发现在称为共享访问模式群集。

Azure Databricks 支持三种群集模式:标准、高并发和单节点。 默认群集模式为“标准”。

重要

  • 如果将工作区分配给 Unity Catalog 元存储,则高并发群集不可用。 可转而使用访问模式来确保访问控制的完整性并强制实施强隔离保证。 另请参阅访问模式
  • 创建群集后,无法更改群集模式。 如果需要另一群集模式,必须创建新群集。

群集配置包括自动终止设置,其默认值依赖于群集模式:

  • 默认情况下,标准群集和单节点群集在 120 分钟后自动终止。
  • 默认情况下,高并发群集不会自动终止。

标准群集

警告

标准模式群集(有时称为“无隔离共享群集”)可以由多个用户共享,用户之间不存在隔离。 如果使用高并发群集模式而不使用其他安全设置(如表 ACL 或凭据直通),则会采用与标准模式群集相同的设置。 帐户管理员可以在这些类型的集群上防止为 Databricks 工作区管理员自动生成内部凭据。 对于更安全的选项,Databricks 推荐使用表 ACL 的高并发群集等替代方案。

建议仅对单个用户使用标准群集。 标准群集可以运行采用以下语言开发的工作负载:Python、SQL、R 和 Scala。

高并发群集

高并发群集是托管的云资源。 高并发群集的主要优点是,它们提供细粒度共享,可以最大限度地提高资源利用率并降低查询延迟。

高并发群集可以运行使用 SQL、Python 和 R 开发的工作负载。高并发群集的性能和安全性通过在单独的进程中运行用户代码来提供,这在 Scala 中是不可能的。

此外,只有高并发群集支持表访问控制

若要创建高并发群集,请将“群集模式”设置为“高并发”。

高并发群集模式

单节点群集

单节点群集没有工作器,在驱动程序节点上运行 Spark 作业。

相比而言,标准模式群集除了需要用于执行 Spark 作业的驱动程序节点外,还需要至少一个 Spark 工作器节点。

若要创建单节点群集,请将“群集模式”设置为“单一节点”。

单节点群集模式

若要详细了解如何使用单节点群集,请参阅单节点或多节点计算

若要缩短群集启动时间,可以将群集附加到驱动程序和工作器节点的空闲实例的预定义。 群集是使用池中的实例创建的。 如果池中没有足够的空闲资源来创建请求的驱动程序节点或工作器节点,则池会通过从实例提供程序分配新实例进行扩展。 终止附加的群集后,它使用的实例会返回到池中,并可供其他群集重复使用。

如果为工作器节点(而不是驱动程序节点)选择池,则驱动程序节点会从工作器节点配置继承该池。

重要

如果尝试为驱动程序节点(而不是工作器节点)选择池,则会出现错误,并且不会创建群集。 此要求可防止出现驱动程序节点必须等待创建工作器节点的情况,反之亦然。

请参阅池配置参考,详细了解如何在 Azure Databricks 中使用池。

Databricks Runtime

Databricks 运行时是在群集上运行的核心组件集。 所有 Databricks 运行时都包括 Apache Spark,都添加了可以提高可用性、性能和安全性的组件与更新。 有关详细信息,请参阅 Databricks Runtime 发行说明版本和兼容性

Azure Databricks 提供多种类型的运行时以及这些运行时类型的多个版本,这些版本会在你创建或编辑群集时出现在“Databricks 运行时版本”下拉列表中。

选择运行时版本

Photon 加速

Photon 适用于运行 Databricks Runtime 9.1 LTS 及更高版本的群集。

要启用 Photon 加速,请选择“使用 Photon 加速”复选框。

如果需要,可在“辅助角色类型”和“驱动程序类型”下拉列表中指定实例类型。

Databricks 建议使用以下实例类型以实现最高性价比:

  • Standard_E4ds_v4
  • Standard_E8ds_v4
  • Standard_E16ds_v4

可以在 Spark UI 中查看 Photon 活动。 以下屏幕截图显示查询详细信息 DAG。 DAG 中有两个 Photon 指示。 首先,Photon 运算符以“Photon”开头,例如 PhotonGroupingAgg。 其次,在 DAG 中,Photon 运算符和各个阶段用桃红色表示,而非 Photon 运算符和各个阶段用蓝色表示。

Photon DAG

Docker 映像

对于某些 Databricks Runtime 版本,可以在创建群集时指定 Docker 映像。 示例用例包括库自定义、不会更改的黄金容器环境以及 Docker CI/CD 集成。

你还可以使用 Docker 映像在具有 GPU 设备的群集上创建自定义深度学习环境。

有关说明,请参阅使用 Databricks 容器服务自定义容器GPU 计算上的 Databricks 容器服务

群集节点类型

群集由一个驱动程序节点和零个或多个工作器节点组成。

你可以为驱动程序节点和工作器节点分别选取不同的云提供程序实例类型,虽然默认情况下驱动程序节点使用与工作器节点相同的实例类型。 不同的实例类型系列适用于不同的用例,例如内存密集型工作负荷或计算密集型工作负荷。

注意

如果安全要求包括计算隔离,请选择一个 Standard_F72s_V2 实例作为工作器类型。 这些实例类型表示使用整个物理主机的隔离虚拟机,并提供为特定工作负载提供支持所需的隔离级别。

驱动程序节点

驱动程序节点保留附加到群集的所有笔记本的状态信息。 驱动程序节点还维护 SparkContext,并解释从笔记本或群集上的库中运行的所有命令,以及运行与 Spark 执行程序协调的 Apache Spark 主节点。

驱动程序节点类型的默认值与工作器节点类型相同。 如果计划使用 collect() 从 Spark 工作器处收集大量数据,并在笔记本中分析这些数据,则可以选择具有更多内存的更大驱动程序节点类型。

提示

由于驱动程序节点保留附加的笔记本的所有状态信息,因此,请务必将未使用的笔记本与驱动程序节点分离。

工作器节点

Azure Databricks 工作器节点运行 Spark 执行程序和正常运行群集所需的其他服务。 通过 Spark 分配工作负载时,所有分布式处理都在工作器节点上进行。 Azure Databricks 为每个工作器节点运行一个执行程序;因此,“执行程序”和“工作器”这两个术语可在 Azure Databricks 体系结构的上下文中互换使用。

提示

若要运行 Spark 作业,至少需要一个工作器节点。 如果群集没有工作器,可以在驱动程序节点上运行非 Spark 命令,但 Spark 命令会失败。

GPU 实例类型

对于在计算方面富有挑战性并且对性能要求很高的任务(例如与深度学习相关的任务),Azure Databricks 支持通过图形处理单元 (GPU) 进行加速的群集。 有关详细信息,请参阅支持 GPU 的计算

群集大小和自动缩放

创建 Azure Databricks 群集时,可以为群集提供固定数目的工作器,也可以为群集提供最小数目和最大数目的工作器。

当你提供固定大小的群集时,Azure Databricks 确保你的群集具有指定数量的工作器。 当你为工作器数量提供了范围时,Databricks 会选择运行作业所需的适当数量的工作器。 这称为“自动缩放”。

使用自动缩放,Azure Databricks 可以根据作业特征动态地重新分配工作器。 在计算方面,管道的某些部分可能比其他部分的要求更高,Databricks 会自动在作业的这些阶段添加额外的工作器(并在不再需要它们时将其删除)。

通过自动缩放,可以更轻松地实现高群集利用率,因为无需通过预配群集来匹配工作负载。 这特别适用于其需求随时间变化的工作负荷(例如在一天的过程中浏览数据集),但也可能适用于预配要求未知的、时间较短的一次性工作负荷。 因此,自动缩放有两个优点:

  • 与大小恒定且未充分预配的群集相比,工作负荷的运行速度可以更快。
  • 与静态大小的群集相比,自动缩放群集可降低总体成本。

自动缩放可以提供这两个优点之一,也可以同时提供这两个优点,具体取决于群集和工作负荷的恒定大小。 当云服务提供商终止实例时,群集大小可能会小于所选工作器的最小数目。 在这种情况下,Azure Databricks 会通过连续重试来重新预配实例,以便保持最小数量的工作器。

注意

自动缩放不适用于 spark-submit 作业。

自动缩放的表现方式

  • 通过 2 个步骤从最小值纵向扩展到最大值。
  • 即使群集未处于空闲状态,也可以通过查看 shuffle 文件状态进行纵向缩减。
  • 按当前节点数的某个百分比进行纵向缩减。
  • 在作业群集上,如果在过去的 40 秒内群集未得到充分利用,则进行纵向缩减。
  • 在全用途群集上,如果在过去的 150 秒内群集未得到充分利用,则进行纵向缩减。
  • spark.databricks.aggressiveWindowDownS Spark 配置属性以秒为单位指定群集做出纵向缩减决策的频率。 增大此值会导致群集更缓慢地纵向缩减。 最大值为 600。

启用并配置自动缩放

若要允许 Azure Databricks 自动重设群集大小,请为群集启用自动缩放,并提供工作器数目的最小值和最大值范围。

  1. 启用自动缩放。

    • 全用途群集 - 在“创建群集”页的“Autopilot 选项”框中,选中“启用自动缩放”复选框:

      为交互式群集启用自动缩放

    • 作业群集 - 在“配置群集”页的“Autopilot 选项”框中,选择“启用自动缩放”复选框:

      为作业群集启用自动缩放

  2. 配置最小和最大工作器数。

    配置最小和最大工作器数

    群集运行时,群集详细信息页将显示已分配的工作器数。 可以将分配的工作器数与工作器配置进行比较,并根据需要进行调整。

重要

如果使用实例池

  • 请确保请求的群集大小小于或等于池中空闲实例的最小数目。 如果它大于该数目,则群集启动时间相当于不使用池的群集的启动时间。
  • 请确保群集最大大小小于或等于池的最大容量。 如果它大于该容量,则无法创建群集。

自动缩放示例

如果将静态群集重新配置为自动缩放群集,Azure Databricks 会立即在最小值和最大值边界内重设群集的大小,然后开始自动缩放。 例如,下表展示了在将群集重新配置为在 5 到 10 个节点之间进行自动缩放时,具有特定初始大小的群集会发生什么情况。

初始大小 重新配置后的大小
6 6
12 10
3 5

自动缩放本地存储

通常,估算特定作业会占用的磁盘空间量十分困难。 为了让你不必估算在创建时要附加到群集的托管磁盘的 GB 数,Azure Databricks 会自动在所有 Azure Databricks 群集上启用自动缩放本地存储。

自动缩放本地存储时,Azure Databricks 会监视群集的 Spark 工作器上提供的可用磁盘空间量。 如果工作器开始出现磁盘空间严重不足的情况,则 Databricks 会在该工作器的磁盘空间耗尽之前自动将新的托管磁盘附加到该工作器。 附加磁盘时,每个虚拟机的总磁盘空间(包括虚拟机的初始本地存储)存在 5 TB 的限制。

仅当虚拟机返回到 Azure 时,才会拆离附加到虚拟机的托管磁盘。 也就是说,只要虚拟机属于某个正在运行的群集,就永远不会将托管磁盘从该虚拟机中拆离。 若要纵向缩减托管磁盘使用量,Azure Databricks 建议在配置了群集大小和自动缩放意外终止的群集中使用此功能。

本地磁盘加密

重要

此功能目前以公共预览版提供。

用于运行群集的某些实例类型可能有本地附加的磁盘。 Azure Databricks 可以在这些本地附加的磁盘上存储 shuffle 数据或临时数据。 为了确保针对所有存储类型加密所有静态数据(包括在群集的本地磁盘上暂时存储的 shuffle 数据),可以启用本地磁盘加密。

重要

工作负荷的运行速度可能会更慢,因为在本地卷中读取和写入加密的数据会影响性能。

启用本地磁盘加密时,Azure Databricks 会在本地生成一个加密密钥,该密钥特定于每个群集节点,可以用来加密存储在本地磁盘上的所有数据。 此密钥的作用域是每个群集节点的本地,会与群集节点本身一起销毁。 在其生存期内,密钥驻留在内存中进行加密和解密,并以加密形式存储在磁盘上。

若要启用本地磁盘加密,必须使用群集 API。 在创建或编辑群集期间,请设置:

{
  "enable_local_disk_encryption": true
}

有关如何调用这些 API 的示例,请参阅群集 API

下面是一个启用本地磁盘加密的群集创建调用示例:

{
  "cluster_name": "my-cluster",
  "spark_version": "7.3.x-scala2.12",
  "node_type_id": "Standard_D3_v2",
  "enable_local_disk_encryption": true,
  "spark_conf": {
    "spark.speculation": true
  },
  "num_workers": 25
}

安全模式

如果将工作区分配给 Unity Catalog 元存储,则使用安全模式(而不是高并发群集模式)以确保访问控制的完整性并强制实施强隔离保证。 高并发群集模式不适用于 Unity Catalog。

在“高级选项”下,从以下群集安全模式中进行选择:

  • :无隔离。 不强制执行工作区本地表访问控制或凭据传递。 无法访问 Unity Catalog 数据。
  • 单一用户:只能由单一用户(默认为创建群集的用户)使用。 其他用户无法附加到群集。 从单一用户安全模式下的群集访问视图时,视图按该用户的权限运行。 单一用户群集支持使用 Python、Scala 和 R 的工作负载。单一用户群集支持初始化脚本、库安装程序和 DBFS 装载。 自动化作业应使用单一用户群集。
  • 用户隔离:可以由多个用户共享。 仅支持 SQL 工作负载。 禁用库安装程序、初始化脚本和 DBFS 装载,以强制执行群集用户之间的严格隔离。
  • 仅限表 ACL(旧式):强制执行工作区本地表访问控制,但无法访问 Unity Catalog 数据。
  • 仅限传递(旧式):强制执行工作区本地凭据传递,但无法访问 Unity Catalog 数据。

Unity Catalog 工作负载支持的安全模式只有“单一用户”和“用户隔离”。

有关详细信息,请参阅访问模式

Spark 配置

若要微调 Spark 作业,可以在群集配置中提供自定义 Spark 配置属性

  1. 在群集配置页面上,单击“高级选项”切换开关。

  2. 单击“Spark”选项卡。

    Spark 配置

    在“Spark 配置”中,以每行一对键值对的形式输入配置属性。

使用群集 API 配置群集时,请在新建群集 API更新群集配置 APIspark_conf 字段中设置 Spark 属性。

Databricks 不建议使用全局 init 脚本。

若要为所有群集设置 Spark 属性,请创建一个全局初始化脚本

dbutils.fs.put("dbfs:/databricks/init/set_spark_params.sh","""
  |#!/bin/bash
  |
  |cat << 'EOF' > /databricks/driver/conf/00-custom-spark-driver-defaults.conf
  |[driver] {
  |  "spark.sql.sources.partitionOverwriteMode" = "DYNAMIC"
  |}
  |EOF
  """.stripMargin, true)

从机密中检索 Spark 配置属性

Databricks 建议在机密而不是纯文本中存储敏感信息(例如密码)。 若要在 Spark 配置中引用机密,请使用以下语法:

spark.<property-name> {{secrets/<scope-name>/<secret-name>}}

例如,将一个名为 password 的 Spark 配置属性设置为 secrets/acme_app/password 中存储的机密值:

spark.password {{secrets/acme-app/password}}

有关详细信息,请参阅用于引用 Spark 配置属性或环境变量中的机密的语法

环境变量

可以配置你可从群集上运行的 init 脚本访问的自定义环境变量。 Databricks 还提供你可在 init 脚本中使用的预定义环境变量。 不能替代这些预定义的环境变量。

  1. 在群集配置页面上,单击“高级选项”切换开关。

  2. 单击“Spark”选项卡。

  3. 在“环境变量”字段中设置环境变量。

    “环境变量”字段

此外,还可以使用新建群集 API更新群集配置 API 中的 spark_env_vars 字段设置环境变量。

群集标记

可以使用群集标记轻松地监视组织中各种组所使用的云资源的成本。 你可以在创建群集时将标记指定为键值对,Azure Databricks 会将这些标记应用于 VM 和磁盘卷等云资源以及 DBU 使用情况报告

对于从池启动的群集,自定义群集标记仅适用于 DBU 使用情况报告,不会传播到云资源。

若要详细了解池和群集标记类型如何协同工作,请参阅使用标记监视使用情况

为了方便起见,Azure Databricks 对每个群集应用四个默认标记:VendorCreatorClusterNameClusterId

此外,在作业群集上,Azure Databricks 应用两个默认标记:RunNameJobId

在 Databricks SQL 使用的资源上,Azure Databricks 还应用默认标记 SqlWarehouseId

警告

请勿向群集分配带有键 Name 的自定义标记。 每个群集都有一个标记 Name,其值由 Azure Databricks 设置。 如果更改与键 Name 关联的值,则 Azure Databricks 不会再跟踪该群集。 因此,群集可能不会在变为空闲后终止,并且将继续产生使用成本。

你可以在创建群集时添加自定义标记。 若要配置群集标记,请执行以下步骤:

  1. 在群集配置页面上,单击“高级选项”切换开关。

  2. 在页面底部,单击“标记”选项卡。

    “标记”选项卡

  3. 为每个自定义标记添加一个键值对。 最多可以添加 43 个自定义标记。

通过 SSH 访问群集

出于安全原因,Azure Databricks 中的 SSH 端口默认处于关闭状态。 若要允许通过 SSH 对 Spark 群集进行访问,请与 Azure Databricks 支持部门联系。

注意

仅当你的工作区部署在你自己的 Azure 虚拟网络中时,才能启用 SSH。

群集日志传送

创建群集时,可以指定一个位置来为 Spark 驱动程序节点、工作器节点和事件传送日志。 日志每隔五分钟会传送到所选目标一次。 当群集被终止时,Azure Databricks 会确保传送在群集终止之前生成的所有日志。

日志的目标取决于群集 ID。 如果指定的目标为 dbfs:/cluster-log-delivery,则 0630-191345-leap375 的群集日志会传送到 dbfs:/cluster-log-delivery/0630-191345-leap375

若要配置日志传送位置,请执行以下步骤:

  1. 在群集配置页面上,单击“高级选项”切换开关。

  2. 单击“日志记录”选项卡。

    群集日志传送

  3. 选择目标类型。

  4. 输入群集日志路径。

注意

此功能在 REST API 中也可用。 请参阅群集 API

初始化脚本

群集节点初始化脚本是一个 shell 脚本,它会在每个群集节点启动期间 Spark 驱动程序或工作器 JVM 启动之前运行。 你可以使用初始化脚本安装未包括在 Databricks 运行时中的包和库、修改 JVM 系统类路径、设置 JVM 所使用的系统属性和环境变量、修改 Spark 配置参数,或者完成其他配置任务。

可以将初始化脚本附加到群集,方法是:展开“高级选项”部分,然后单击“初始化脚本”选项卡。

有关详细说明,请参阅 什么是初始化脚本?