Databricks 资产捆绑包开发
本文介绍 Databricks 资产捆绑包的开发和生命周期。 有关 Databricks 资产捆绑包的一般信息,请参阅什么是 Databricks 资产捆绑包?。
捆绑包的生命周期
若要了解如何有效使用捆绑包,需要了解捆绑包的基本生命周期:
- 捆绑包主干是基于项目创建的。
- 捆绑包项目是在本地开发的。 捆绑包包含用于定义基础结构和工作区设置(例如部署目标)、Databricks 资源设置(例如作业和管道)以及源文件和其他工件的配置文件。
- 捆绑包项目已经过验证。 验证过程根据相应的对象架构来验证捆绑包配置中的设置和资源定义,以确保捆绑包可部署到 Databricks。
- 捆绑包部署到目标工作区。 最通常的情况下,捆绑包会首先部署到用户的个人开发工作区以进行测试。 完成捆绑包的测试后,可以将其部署到暂存区,然后部署到生产目标。
- 可以运行部署的捆绑包中定义的工作流资源。 例如,可以运行某个作业。
- 如果不再需要使用捆绑包,可以将其永久销毁。
可以使用 Databricks CLI bundle 命令来创建、验证、部署、运行和销毁捆绑包,如以下部分所述。
步骤 1:创建捆绑包
可通过三种方法开始创建捆绑包:
- 使用默认捆绑包模板。
- 使用自定义捆绑包模板。
- 手动创建捆绑包。
使用默认捆绑包模板
要使用 Azure Databricks 默认捆绑包模板创建一个初学者捆绑包,然后再进一步自定义,请使用 Databricks CLI 0.218.0 或更高版本来运行 bundle init
命令,以便从可用模板列表中选择。 请参阅从项目模板创建捆绑包。
databricks bundle init
可以在 databricks/cli 和 databricks/mlops-stacks Github 公共存储库中查看默认捆绑包模板的源。
使用自定义捆绑包模板
要使用 Azure Databricks 默认捆绑包模板以外的捆绑包模板,必须知道本地路径或远程捆绑包模板位置的 URL。 使用 Databricks CLI 0.218.0 或更高版本运行 bundle init
命令,如下所示:
databricks bundle init <project-template-local-path-or-url>
有关此命令的详细信息,请参阅 Databricks 资产捆绑包模板。 有关特定捆绑包模板的信息,请参阅捆绑包模板提供程序的文档。
手动创建捆绑包
要手动创建捆绑包,而不是使用捆绑包模板创建,请在本地计算机上创建项目目录,或使用第三方 Git 提供程序创建空存储库。
在你的目录或存储库中,创建一个或多个捆绑包配置文件作为输入。 这些文件以 YAML 格式表示。 必须至少有一个(且只有一个)名为 databricks.yml
的捆绑包配置文件。 必须在 databricks.yml
文件的 include
映射中引用其他捆绑包配置文件。
若要更轻松地快速地创建符合 Databricks 资产捆绑包配置语法的 YAML 文件,可以使用支持 YAML 文件 和 JSON 架构文件的 Visual Studio Code、PyCharm Professional 或 IntelliJ IDEA Ultimate 等工具,如下所示:
Visual Studio Code
将 YAML 语言服务器支持添加到 Visual Studio Code,例如,通过从 Visual Studio Code Marketplace 安装 YAML 扩展。
使用 Databricks CLI 0.218.0 或更高版本运行
bundle schema
命令并将输出重定向到 JSON 文件,生成 Databricks 资产捆绑包配置 JSON 架构文件。 例如,在当前目录中生成名为bundle_config_schema.json
的文件,如下所示:databricks bundle schema > bundle_config_schema.json
使用 Visual Studio Code 在当前目录中创建或打开捆绑包配置文件。 此文件必须命名为
databricks.yml
。将以下注释添加到捆绑包配置文件的开头:
# yaml-language-server: $schema=bundle_config_schema.json
注意
在前面的注释中,如果 Databricks 资产捆绑包配置 JSON 架构文件位于不同的路径中,请将
bundle_config_schema.json
替换为架构文件的完整路径。使用之前添加的 YAML 语言服务器功能。 有关详细信息,请参阅 YAML 语言服务器的文档。
PyCharm 专业版
使用 Databricks CLI 0.218.0 或更高版本运行
bundle schema
命令并将输出重定向到 JSON 文件,生成 Databricks 资产捆绑包配置 JSON 架构文件。 例如,在当前目录中生成名为bundle_config_schema.json
的文件,如下所示:databricks bundle schema > bundle_config_schema.json
配置 PyCharm 以识别捆绑包配置 JSON 架构文件,然后按照“配置自定义 JSON 架构”中的说明完成 JSON 架构映射。
使用 PyCharm 创建或打开捆绑包配置文件。 此文件必须命名为
databricks.yml
。 键入时,PyCharm 会检查 JSON 架构语法和格式,并提供代码补全提示。
IntelliJ IDEA Ultimate
使用 Databricks CLI 0.218.0 或更高版本运行
bundle schema
命令并将输出重定向到 JSON 文件,生成 Databricks 资产捆绑包配置 JSON 架构文件。 例如,在当前目录中生成名为bundle_config_schema.json
的文件,如下所示:databricks bundle schema > bundle_config_schema.json
配置 IntelliJ IDEA 以识别捆绑包配置 JSON 架构文件,然后按照“配置自定义 JSON 架构”中的说明完成 JSON 架构映射。
使用 IntelliJ IDEA 创建或打开捆绑包配置文件。 此文件必须命名为
databricks.yml
。 键入时,IntelliJ IDEA 会检查 JSON 架构语法和格式,并提供代码补全提示。
步骤 2:填充捆绑包配置文件
捆绑包配置文件通过指定工作区详细信息、工件名称、文件位置、作业详细信息和管道详细信息等设置,定义 Azure Databricks 工作流。 捆绑包配置通常还包含开发、暂存和生产部署目标。 有关捆绑配置文件的详细信息,请参阅 Databricks 资产捆绑包配置。
可以使用 bundle generate
命令为工作区中的现有资源自动生成捆绑包配置,然后使用 bundle deployment bind
将捆绑包配置链接到工作区中的资源,使它们保持同步。请参阅生成捆绑配置文件和绑定捆绑包资源。
步骤 3:验证捆绑包配置文件
在部署工件或者运行作业或管道之前,应该验证捆绑包配置文件中的定义是否有效。 为此,请从捆绑包项目根目录运行 bundle validate
命令。 请参阅验证捆绑包。
databricks bundle validate
如果验证成功,则会返回捆绑包标识摘要和确认消息。 若要输出架构,请使用 databricks bundle schema
命令。 请参阅显示捆绑包配置架构。
步骤 4:部署捆绑包
在部署捆绑包之前,请确保远程工作区已启用工作区文件。 请参阅什么是工作区文件?。
若要将捆绑包部署到远程工作区,请按照部署捆绑包中的说明从捆绑包根目录运行 bundle deploy
命令。 Databricks CLI 部署到捆绑包配置文件中声明的目标工作区。 请参阅目标。
databricks bundle deploy
捆绑包的唯一标识由其名称、目标和部署者的标识所定义。 如果这些属性在不同的捆绑包中相同,则这些捆绑包的部署会互相干扰。 有关更多详细信息,请参阅部署捆绑包。
提示
可以通过设置 BUNDLE_ROOT
环境变量,在捆绑包根目录之外运行 databricks bundle
命令。 如果未设置此环境变量,则 databricks bundle
命令会尝试通过在当前工作目录中搜索来查找捆绑包根目录。
步骤 5:运行捆绑包
若要运行特定的作业或管道,请从捆绑根目录运行 bundle run
命令,指定捆绑配置文件中声明的作业或管道密钥,如运行捆绑包中所述。 资源键是资源的 YAML 块的顶级元素。 如果未指定作业或管道密钥,系统会提示从可用资源列表中选择要运行的资源。 如果未指定 -t
选项,则会使用捆绑包配置文件中声明的默认目标。 例如,若要在默认目标的上下文中运行具有密钥 hello_job
的作业:
databricks bundle run hello_job
若要在用名称 dev
声明的目标的上下文中运行具有密钥 hello_job
的作业:
databricks bundle run -t dev hello_job
步骤 6:销毁捆绑包
处理完捆绑包后,如果你要删除以前部署的作业、管道和项目,请从捆绑包根目录运行 bundle destroy
命令。 此命令会删除捆绑包配置文件中定义的所有以前部署的作业、管道和工件。 请参阅销毁捆绑包。
databricks bundle destroy
默认情况下,系统会提示你是否确认要永久删除以前部署的作业、管道和项目。 若要跳过这些提示并执行自动永久删除,请将 --auto-approve
选项添加到 bundle destroy
命令。