使用群集范围的初始化脚本

群集范围 init 脚本是在群集配置中定义的 init 脚本。 群集范围 init 脚本同时适用于你创建的群集和为运行作业而创建的群集。

可使用 UI、CLI 以及调用 Clusters API 来配置群集范围的 init 脚本。 本部分重点介绍如何使用 UI 执行这些任务。 有关其他方法,请参阅 Databricks CLI群集 API

你可以添加任意数量的脚本,这些脚本会按照所提供的顺序依次执行。

如果群集范围 init 脚本返回非零的退出代码,则群集启动会失败。 可通过配置集群日志传送并检查初始化脚本日志来排查群集范围初始化脚本问题。 请参阅 初始化脚本日志记录

使用 UI 配置群集范围 init 脚本

本部分介绍如何如何使用 Azure Databricks UI 配置群集来运行 init 脚本。

Databricks 建议将所有 init 脚本作为群集范围的 init 脚本进行管理。 如果使用共享或单用户访问模式的计算,请将 init 脚本存储在 Unity Catalog 卷中。 如果使用非隔离共享访问模式的计算,请将工作区文件用于 init 脚本。

对于共享访问模式,必须将 init 脚本添加到 allowlist。 请参阅将共享计算上的库和 init 脚本加入允许列表

若要使用 UI 来配置群集以运行 init 脚本,请完成以下步骤:

  1. 在群集配置页面上,单击“高级选项”切换开关。
  2. 在页面底部,单击“Init 脚本”选项卡。
  3. 在“源”下拉列表中,选择“工作区”、“卷”或“ABFSS”源类型。
  4. 指定 init 脚本的路径,例如以下示例之一:
    • 对于与工作区文件一起存储在主目录中的 init 脚本:/Users/<user-name>/<script-name>.sh
    • 对于使用 Unity Catalog 卷进行存储的 init 脚本:/Volumes/<catalog>/<schema>/<volume>/<path-to-script>/<script-name>.sh
    • 对于使用对象存储进行存储的 init 脚本:abfss://container-name@storage-account-name.dfs.core.chinacloudapi.cn/path/to/init-script
  5. 单击“添加” 。

在单用户访问模式下,使用已分配主体(用户或服务主体)的标识。

在共享访问模式下,使用群集所有者的标识。

注意

无隔离共享访问模式不支持卷,但使用与共享访问模式相同的标识分配。

若要从群集配置中删除脚本,请单击脚本右侧的“回收站”图标。 确认删除后,系统将提示你重启群集。 (可选)可根据需要从脚本上传到的位置删除脚本文件。

注意

如果使用“ABFSS”源类型配置 init 脚本,则必须配置访问凭据。

Databricks 建议使用 Microsoft Entra ID 服务主体来管理对存储在 Azure Data Lake Storage Gen2 中的 init 脚本的访问。 请使用以下链接的文档完成此设置:

  1. 创建对所需 Blob 具有读取和列出权限的服务主体。 请参阅通过 Microsoft Entra ID(以前称为 Azure Active Directory)使用服务主体访问存储

  2. 使用机密保存凭据。 请参阅机密

  3. 请在创建群集时在 Spark 配置和环境变量中设置属性,如以下示例所示:

    Spark 配置:

    spark.hadoop.fs.azure.account.auth.type.<storage-account>.dfs.core.chinacloudapi.cn OAuth
    spark.hadoop.fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.chinacloudapi.cn org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
    spark.hadoop.fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.chinacloudapi.cn <application-id>
    spark.hadoop.fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.chinacloudapi.cn {{secrets/<secret-scope>/<service-credential-key>}}
    spark.hadoop.fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.chinacloudapi.cn https://login.chinacloudapi.cn/<tenant-id>/oauth2/token
    

    环境变量:

    SERVICE_CREDENTIAL={{secrets/<secret-scope>/<service-credential-key>}}
    
  4. (可选)使用 azcopyAzure CLI 重构 init 脚本。

    可以在 init 脚本中引用配置群集期间设置的环境变量,以传递作为用来进行验证的机密存储的凭据。

警告

DBFS 上的群集范围的 init 脚本已终止服务。 UI 中的“DBFS”选项存在于某些工作区中,用以支持旧工作负载,但不推荐使用。 存储在 DBFS 中的所有 init 脚本都应迁移。 有关迁移说明,请参阅从 DBFS 迁移 init 脚本

排查群集范围的初始化脚本问题

  • 该脚本必须存在于配置的位置。 如果该脚本不存在,则尝试启动群集或纵向扩展执行程序会导致失败。
  • Init 脚本不能大于 64KB。 如果脚本超过该大小,则群集将无法启动,并会在群集日志中显示失败消息。