什么是 init 脚本?

init 脚本(初始化脚本)是一个 shell 脚本,它在 Apache Spark 驱动程序或执行程序 JVM 启动之前,在每个群集节点启动期间运行。 如果需要使用 init 脚本和配置信息,可参考本文提供的有关 init 脚本和配置信息的建议。

有关 init 脚本的建议

Databricks 建议尽可能使用内置平台功能而非 init 脚本。 广泛使用 init 脚本可能会减缓迁移到新 Databricks Runtime 版本的速度,并导致无法采用某些 Databricks 优化。

重要

如果需要从 DBFS 上的 init 脚本迁移,请参阅从 DBFS 迁移 init 脚本

以下 Databricks 功能可以实现 init 脚本的一些常见用例:

如果必须使用 init 脚本:

  • 使用计算策略或群集范围的 init 脚本(而非全局 init 脚本)管理 init 脚本。 请参阅 init 脚本类型
  • 使用计算策略管理生产环境和交互环境的库安装。 不要使用 init 脚本来安装库。
  • 对所有工作负载使用共享访问模式。 仅当共享访问模式不支持所需功能时,才使用单用户访问模式。
  • 为所有工作负载使用新的 Databricks Runtime 版本和 Unity 目录。

下表提供了按 Databricks Runtime 版本和 Unity Catalog 启用状态组织的建议。

环境 建议
包含 Unity Catalog 的 Databricks Runtime 13.3 LTS 及更高版本 将 init 脚本存储在 Unity Catalog 中。
不包含 Unity Catalog 的 Databricks Runtime 11.3 LTS 及更高版本 将 init 脚本存储为工作区文件。 (文件大小限制为 500 GB)。
Databricks Runtime 10.4 LTS 及更低版本 使用云对象存储来存储 init 脚本。

Azure Databricks 支持哪些类型的 init 脚本?

Azure Databricks 支持两种类型的 init 脚本:群集范围的脚本和全局脚本,但建议使用群集范围的 init 脚本。

  • 群集范围脚本:在使用脚本配置的每个群集上运行。 这是运行 init 脚本的推荐方法。 请参阅使用群集范围的 init 脚本
  • 全局:在配置了单用户访问模式或无隔离共享访问模式的工作区中的所有群集上运行。 这些 init 脚本可能会导致意外问题,例如库冲突。 只有工作区管理员用户才能创建全局 init 脚本。 请参阅使用全局 init 脚本

每次更改任何类型的 init 脚本时,都必须重启受该脚本影响的所有群集。

全局 init 脚本在群集范围的 init 脚本之前运行。

重要

旧版全局脚本和以群集命名的旧版 init 脚本会在其他 init 脚本之前运行。 这些 init 脚本已终止生命周期,但可能存在于 2023 年 2 月 21 日之前创建的工作区中。 请参阅群集命名的 init 脚本全局 init 脚本(旧版)

可在何处安装 init 脚本?

可以在工作区文件、Unity 目录卷和云对象存储中存储和配置 init 脚本,但 init 脚本在所有群集配置上都不受支持,并非所有文件都可从 init 脚本引用。

下表显示了基于源位置和群集访问模式对 init 脚本的支持。 列出的 Databricks Runtime 版本是使用该组合所需的最低版本。 有关群集访问模式的信息,请参阅访问模式

注意

共享访问模式需要管理员向 allowlist 添加 init 脚本。 请参阅将共享计算上的库和 init 脚本加入允许列表

共享访问模式 单一访问模式 无隔离共享访问模式
工作区文件 不支持 所有支持的 Databricks Runtime 版本 所有支持的 Databricks Runtime 版本
13.3 LTS 13.3 LTS 不支持
云存储 13.3 LTS 所有支持的 Databricks Runtime 版本 所有支持的 Databricks Runtime 版本

从 DBFS 迁移 init 脚本

需要从 DBFS 迁移 init 脚本的用户可按照以下指南操作。 请确保已为你的配置确定了的正确目标。 请参阅有关 init 脚本的建议