管理群集

本文介绍如何管理 Azure Databricks 群集,包括显示、编辑、启动、终止、删除、控制访问权限以及监视性能和日志。

显示群集

若要查看工作区中的群集,请在边栏中单击 compute icon“计算”。

左侧有两列,指示群集是否已固定,以及群集的状态。 将鼠标悬停在状态上可获取详细信息。

固定群集

群集在被终止 30 天后会被永久删除。 为了在群集终止超过 30 天后仍保留通用群集配置,管理员可固定群集。 最多可以固定 100 个群集。

管理员可以通过单击固定图标,从群集列表或群集详细信息页固定群集。

还可调用群集 API 终结点,以编程方式固定群集。

以 JSON 文件的形式查看群集配置

有时,将群集配置视为 JSON 会很有帮助。 尤其是当你想要使用群集 API 创建相似的群集时,此方法特别有用。 查看现有群集时,转到“配置”选项卡,单击此选项卡右上角的“JSON”,复制该 JSON 并将其粘贴到 API 调用中。 JSON 视图是只读的。

编辑群集

可以在群集详细信息 UI 中编辑群集配置。 还可调用群集 API 终结点,以编程方式编辑群集。

注意

  • 附加到群集的笔记本和作业在编辑后将保持附加状态。
  • 在群集上安装的库在编辑后将保持安装状态。
  • 如果要编辑正在运行的群集的任何属性(群集大小和权限除外),则必须重启它。 这可能会影响当前正在使用该群集的用户。
  • 只能编辑正在运行或已终止的群集。 不过,可以在“群集详细信息”页上更新未处于这些状态的群集的权限。

克隆群集

要克隆现有群集,请从该群集的 Kebab menu Kebab 菜单(也称为三点菜单)中选择“克隆”。

选择“克隆”后,群集创建 UI 会打开,其中预先填充了群集配置。 克隆中不包括以下属性:

  • 群集权限
  • 已安装的库
  • 附加的笔记本

控制对群集的访问

管理员设置页中的群集访问控制允许工作区管理员向其他用户提供细化的群集访问权限。 有两种类型的群集访问控制:

  • 群集创建权限:工作区管理员可以选择允许哪些用户创建群集。
  • 群集级别权限:对某个群集拥有“可管理”权限的用户可以配置其他用户是否能够附加到该群集、重启该群集、管理该群集以及调整其大小。

若要编辑群集的权限,请从群集的 Kebab menu kebab 菜单选择“编辑权限”

有关群集访问控制和群集级别权限的详细信息,请参阅群集访问控制

终止群集

若要保存群集资源,可以终止群集。 将会存储已终止群集的配置,以便稍后可以重用(或者如果是作业,可以自动启动)该群集。 可以手动终止群集,也可以将群集配置为在处于不活动状态指定时间后自动终止。 如果已终止的群集数超过 150,则会删除最旧的群集。

除非群集已固定或重启,否则会在终止它 30 天后,自动将它永久删除。

终止的群集显示在群集列表中,群集名称左侧有灰色圆圈。

注意

在新的作业群集上运行作业时(建议做法),群集将终止,并且在作业完成后无法重启。 另一方面,如果计划在已终止的现有通用群集上运行作业,则该群集将自动启动

重要

如果使用的是试用版高级工作区,所有运行中的群集将在以下情况下终止:

  • 将工作区升级到完整的高级版时。
  • 工作区未升级且试用版过期时。

手动终止

可以从群集列表(通过单击群集行上的方块)或群集详细信息页(通过单击“终止”)手动终止群集。

自动终止

还可以为群集设置自动终止。 在群集创建过程中,可以指定希望群集在处于不活动状态几分钟后终止。

如果当前时间与群集上运行的最后一个命令之间的差值大于处于不活动状态指定时间,则 Azure Databricks 会自动终止该群集。

当群集上的所有命令(包括 Spark 作业、结构化流式处理和 JDBC 调用)执行完毕时,该群集被视为处于不活动状态。

警告

  • 群集不会报告使用 DStreams 时产生的活动。 这意味着自动终止的群集在运行 DStreams 时可能会被终止。 请关闭针对运行 DStreams 的群集的自动终止功能,或考虑使用结构化流式处理。
  • 自动终止功能仅监视 Spark 作业,不监视用户定义的本地进程。 因此,如果所有 Spark 作业都已完成,则即使本地进程正在运行,也可能终止群集。
  • 空闲群集在终止之前的不活动期间会继续累积 DBU 和云实例费用。

配置自动终止

可以在创建群集 UI 中配置自动终止。 确保选中此框,并在“在非活动 ___ 分钟后终止”设置中输入分钟数。

可通过清除“自动终止”复选框或通过将处于不活动状态的时间指定为 0 来选择退出自动终止。

注意

自动终止在最新的 Spark 版本中最受支持。 较早的 Spark 版本具有已知的限制,这可能会导致群集活动的报告不准确。 例如,运行 JDBC、R 或流式处理命令的群集可能会报告过时的活动时间,导致群集提前终止。 请升级到最新的 Spark 版本,以从 bug 修补程序和改进的自动终止功能中受益。

意外终止

有时,群集会意外终止,而不是手动终止或配置的自动终止。

有关终止原因和修正步骤的列表,请参阅知识库

删除群集

删除群集会终止群集并删除其配置。 若要删除某个群集,请从该群集的 Kebab menu 菜单选择“删除”

警告

不能撤消此操作。

若要删除固定群集,必须先由管理员取消固定该群集。

还可调用群集 API 终结点,以编程方式删除群集。

重启群集

可以从群集列表、群集详细信息页或笔记本重启先前已终止的群集。 还可调用群集 API 终结点,以编程方式启动群集。

Azure Databricks 使用群集的唯一群集 ID 标识该群集。 启动已终止的群集后,Databricks 将重新创建具有相同 ID 的群集,自动安装所有库,然后重新附加笔记本。

注意

如果使用的是试用版工作区并且该试用版已过期,则将无法启动群集。

重启群集以使用最新映像更新该群集

重启群集时,它会获取计算资源容器和 VM 主机的最新映像。 有必要为长时间运行的群集(例如用于处理流数据的群集)计划定期重启。

由你负责定期重启所有计算资源,使映像采用最新的映像版本保持为最新。

重要

如果为帐户或工作区启用合规性安全配置文件,则长时间运行的群集将在 25 天后自动重启。 Databricks 建议工作区管理员在计划的维护时段手动重启群集。 这可降低自动重启中断计划作业的风险。

笔记本示例:查找长时间运行的群集

如果你是工作区管理员,可以运行一个脚本来确定每个群集已经运行的时长,并在这些群集的运行时长超过指定天数时选择性地重启它们。 Azure Databricks 将此脚本作为笔记本提供。

脚本的第一行定义配置参数:

  • min_age_output:群集可以运行的最大天数。 默认值为 1。
  • perform_restart:如果为 True,脚本将重启运行时长大于 min_age_output 所指定的天数的群集。 默认值为 False,它标识长时间运行的群集,但不会重启它们。
  • secret_configuration:使用机密范围和密钥名称替换 REPLACE_WITH_SCOPEREPLACE_WITH_KEY。 有关设置机密的更多详细信息,请参阅笔记本。

警告

如果将 perform_restart 设置为 True,脚本将自动重启符合条件的群集,这可能会导致活动作业失败并重置打开的笔记本。 为了降低中断工作区的业务关键型作业的风险,请规划一个计划性维护时段,并确保通知工作区用户。

确定并选择性地重启长时间运行的群集笔记本

获取笔记本

针对作业和 JDBC/ODBC 查询进行的群集自动启动

当计划运行分配给已终止的群集的作业时,或者从 JDBC/ODBC 接口连接到已终止的群集时,该群集将自动重启。 请参阅创建作业JDBC 连接

通过群集自动启动,你可以将群集配置为自动终止,而无需手动干预来为计划的作业重启群集。 此外,还可以通过计划作业在已终止的群集上运行来计划群集初始化。

自动重启群集之前,会检查群集作业访问控制权限。

注意

如果群集是在 Azure Databricks 平台版本 2.70 或更早版本中创建的,则不会自动启动:计划在已终止的群集上运行的作业将会失败。

在 Apache Spark UI 中查看群集信息

可以通过选择群集详细信息页上的“Spark UI”选项卡查看有关 Spark 作业的详细信息。

如果重启已终止的群集,Spark UI 将显示已重启的群集的信息,而不会显示已终止的群集的历史信息。

查看群集日志

Azure Databricks 提供以下三种与群集相关的活动日志记录:

  • 群集事件日志,可捕获群集生命周期事件,如创建、终止和配置编辑。
  • Apache Spark 驱动程序和工作器日志,可用于调试。
  • 群集 init 脚本日志,这对于调试 init 脚本非常有用。

本部分讨论群集事件日志、驱动程序和工作器日志。 有关 init 脚本日志的详细信息,请参阅 Init 脚本日志记录

群集事件日志

群集事件日志显示由用户操作手动触发或 Azure Databricks 自动触发的重要群集生命周期事件。 此类事件影响群集的整个操作以及群集中运行的作业。

有关受支持的事件类型,请参阅群集 API 数据结构。

事件的存储时间为 60 天,相当于 Azure Databricks 中的其他数据保留时间。

查看群集事件日志

若要查看群集的事件日志,请在群集详细信息页上选择“事件日志”选项卡。

有关事件的详细信息,请在日志中单击其所在行,然后单击“JSON”选项卡以查看详细信息。

群集驱动程序和工作器日志

笔记本、作业和库中的直接打印和日志语句会转到 Spark 驱动程序日志。 可以从群集详细信息页上的“驱动程序日志”选项卡访问这些日志文件。 单击日志文件名称即可下载。

这些日志包含三个输出:

  • 标准输出
  • 标准错误
  • Log4j 日志

若要查看 Spark worker 日志,请使用“Spark UI”选项卡。还可为群集配置日志传送位置。 工作器和群集日志均传递到指定位置。

监视性能

为了帮助你监视 Azure Databricks 群集的性能,Azure Databricks 提供了从群集详细信息页访问指标的权限。 对于 Databricks Runtime 12.2 及更低版本,Azure Databricks 提供对 Ganglia 指标的访问权限。 对于 Databricks Runtime 13.0 及更高版本,群集指标由 Azure Databricks 提供。

此外,你还可以配置 Azure Databricks 群集,以将指标发送到 Azure Monitor(Azure 的监视平台)中的 Log Analytics 工作区。

还可以在群集节点上安装 Datadog 代理,以将 Datadog 指标发送到 Datadog 帐户。

群集指标

群集指标是 Databricks Runtime 13.0 及更高版本的默认监视工具。 若要访问群集指标 UI,请导航到群集详细信息页上的“指标”选项卡。

可以通过使用日期选取器筛选器选择时间范围来查看历史指标。 每分钟收集一次指标。 还可以通过单击“刷新”按钮获取最新指标。 有关详细信息,请参阅查看实时和历史群集指标

Ganglia 指标

注意

Ganglia 指标仅适用于 Databricks Runtime 12.2 及更低版本。

若要访问 Ganglia UI,请导航到群集详细信息页上的“指标”选项卡。 Ganglia UI 中提供 CPU 指标,可用于所有 Databricks 运行时。 GPU 指标适用于已启用 GPU 的群集。

若要查看实时指标,请单击“Ganglia UI”链接。

若要查看历史指标,请单击快照文件。 快照包含所选时间前一小时的聚合指标。

注意

Docker 容器不支持 Ganglia。 如果对群集使用 Docker 容器,则不会提供 Ganglia 指标。

配置 Ganglia 指标收集

默认情况下,Azure Databricks 每 15 分钟收集一次 Ganglia 指标。 若要配置集合时间,请使用 init 脚本或在创建新群集 APIspark_env_vars 字段中设置 DATABRICKS_GANGLIA_SNAPSHOT_PERIOD_MINUTES 环境变量。

Azure Monitor

可以配置 Azure Databricks 群集,以将指标发送到 Azure Monitor(Azure 的监视平台)中的 Log Analytics 工作区。 有关完整说明,请参阅监视 Azure Databricks

注意

如果你已在自己的虚拟网络中部署了 Azure Databricks 工作区,并且已将网络安全组 (NSG) 配置为拒绝 Azure Databricks 不需要的所有出站流量,则必须为 AzureMonitor 服务标记配置其他出站规则。

笔记本示例:Datadog 指标

Datadog metrics

可以在群集节点上安装 Datadog 代理,以将 Datadog 指标发送到 Datadog 帐户。 以下笔记本演示了如何使用群集范围 init 脚本在群集上安装 Datadog 代理。

若要在所有群集上安装 Datadog 代理,请使用群集策略管理群集范围的 init 脚本。

安装 Datadog 代理 init 脚本笔记本

获取笔记本

停用竞价实例

由于竞价实例可降低成本,因此,使用竞价实例(而不是按需实例)创建群集是运行作业的常用方法。 但是,云提供商可通过计划机制来抢占竞价实例。 抢占竞价实例会对正在运行的作业带来以下问题:

  • 随机提取失败
  • 随机数据丢失
  • RDD 数据丢失
  • 作业失败

可以通过停用来解决这些问题。 停用是利用云提供商在停用竞价实例之前通常会发送的通知。 当包含执行程序的竞价实例收到抢占通知时,停用进程将尝试将随机数据和 RDD 数据迁移到运行正常的执行程序。 最终抢占前的持续时间通常为 30 秒到 2 分钟,具体取决于云提供商。

Databricks 建议启用数据迁移,同时也启用停用。 通常情况下,迁移的数据越多出错的可能性就越小,包括随机提取失败、随机数据丢失以及 RDD 数据丢失。 数据迁移还可以减少重新计算并节省成本。

注意

我们能做的最大努力是停用,但不保证所有数据在最终抢占之前都已迁移。 如果正在运行的任务是从执行程序提取随机数据,停用无法保证不会出现随机提取失败。

启用停用后,由竞价实例抢占导致的任务失败不会计入失败尝试总数。 抢占导致的任务失败不计入失败尝试,是因为失败原因属于任务外部,并不会导致作业失败。

启用停用

若要在群集上启用停用,请在群集配置 UI 中“高级选项”下的“Spark”选项卡中输入以下属性。 有关这些属性的信息,请参阅 Spark 配置

  • 若要为应用程序启用停用,请在“Spark 配置”字段中输入以下属性:

    spark.decommission.enabled true
    
  • 若要在停用期间启用随机数据迁移,请在“Spark 配置”字段中输入以下属性:

    spark.storage.decommission.enabled true
    spark.storage.decommission.shuffleBlocks.enabled true
    
  • 若要在停用期间启用 RDD 缓存数据迁移,请在“Spark 配置”字段中输入以下属性:

    spark.storage.decommission.enabled true
    spark.storage.decommission.rddBlocks.enabled true
    

    注意

    如果将 RDD StorageLevel 复制设置为大于 1,则 Databricks 不建议启用 RDD 数据迁移,因为副本可确保 RDD 不会丢失数据。

  • 若要为工作器启用停用,请在“环境变量”字段中输入以下属性:

    SPARK_WORKER_OPTS="-Dspark.decommission.enabled=true"
    

在 UI 中查看停用状态和丢失原因

要从 UI 访问工作器的停用状态,请导航到“Spark 群集 UI - 主节点”选项卡。

停用完成后,可以在群集详细信息页上的“Spark UI > 执行程序”选项卡中查看执行程序的丢失原因。