Databricks Asset Bundle 專案範本
Databricks 資產套件組合描述 Databricks 資源,例如作業、管線和筆記本作為來源檔案,可讓您將這些來源檔案包含元數據,以布建基礎結構和其他資源,並提供專案的端對端定義,全部封裝為單一可部署專案。 請參閱什麼是 Databricks Asset Bundles?。
套件組合範本可讓使用者以一致、可重複的方式建立套件組合,方法是建立跨部署管線通用的資料夾結構、建置步驟和工作、測試和其他 DevOps 基礎結構即程式代碼 (IaC) 屬性。
例如,如果您定期執行需要自定義套件的 Databricks 作業,並在安裝時執行耗時的編譯步驟,您可以建立指定自定義容器環境的套件組合範本來加速開發迴圈。
Databricks 提供一組 預設套件組合範本,但您也可以建立 自定義套件組合範本。 然後,使用者可以使用 套件組合 init 命令初始化套件組合,並指定預設範本或自定義範本。
使用範本建立套件組合
若要使用 Azure Databricks 套件組合範本來建立套件組合,請使用 Databricks CLIbundle init
命令,指定要使用的範本名稱。 例如,下列命令會使用預設 Python 套件組合範本來建立套件組合:
databricks bundle init default-python
若要使用自定義套件組合範本,請將範本的本機路徑或遠端 URL 傳遞至 Databricks CLIbundle init
命令。
例如,下列命令會使用在dab-container-template
中建立的範本:
databricks bundle init /projects/my-custom-bundle-templates/dab-container-template
如果您未指定範本,bundle init
命令會提示一組可供您選擇的預設範本。
預設套件組合範本
Azure Databricks 提供下列預設套件組合範本:
範本 | 描述 |
---|---|
default-python |
搭配 Databricks 使用 Python 的範本。 此範本會建立包含作業和 DLT 管線的組合包。 請參閱 default-python。 |
default-sql |
搭配 Databricks 使用 SQL 的範本。 此範本包含設定檔,定義在 SQL 倉儲上執行 SQL 查詢的工作。 請參閱 default-sql。 |
dbt-sql |
利用 dbt 核心進行本機開發,並利用套件組合進行部署的範本。 此範本包含定義包含 dbt 任務的工作的配置,以及定義已部署 dbt 任務的 dbt 配置檔的設定文件。 請參閱 dbt-sql。 |
mlops-stacks |
用於啟動新的 MLOps Stacks 專案的進階完整堆疊範本。 請參閱 mlops-stacks 和適用於 MLOps Stacks 的 Databricks Asset Bundles。 |
自定義套件組合範本
套件組合範本會使用 Go 套件範本化語法,提供您可以建立之自定義套件組合範本的彈性。 請參閱 Go 套件範本文件。
範本項目結構
套件組合範本專案至少必須具備:
- 專案根目錄的
databricks_template_schema.json
檔案,定義套件組合項目名稱的一個使用者提示屬性。 請參閱 樣本架構。 - 位於
databricks.yml.tmpl
資料夾中的template
檔案,定義使用範本建立的任何套件組合的組態。 如果您的databricks.yml.tmpl
檔案參考任何其他*.yml.tmpl
組態範本,請在include
對應中指定這些範本的位置。 請參閱 組態範本。
此外,套件範本專案的資料夾結構及其內含檔案會由使用範本建立的套件在 template
資料夾中進行複製。 例如,如果您想要讓範本在 src
資料夾中產生包含一個簡單筆記本的套件,以及在 resources
資料夾中執行筆記本的作業定義,您可以這樣組織範本專案:
basic-bundle-template
├── databricks_template_schema.json
└── template
└── {{.project_name}}
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── simple_notebook.ipynb
提示
此套件組合範本中的專案資料夾名稱和作業定義檔的名稱會使用範本變數。 如需範本協助程式和變數的相關信息,請參閱 範本協助程式和變數。
範本架構
自訂捆綁範本專案必須在專案根目錄包含一個 databricks_template_schema.json
JSON 檔案。 當執行 bundle init
命令時,此檔案會定義 Databricks CLI 所使用的欄位,例如提示文字。
下列基本 databricks_template_schema.json
檔案會定義套件組合專案的輸入變數 project_name
,其中包含提示訊息和預設值。 然後,它會定義一個統合專案初始化的成功訊息,該訊息會使用訊息中的輸入變數值。
{
"properties": {
"project_name": {
"type": "string",
"default": "basic_bundle",
"description": "What is the name of the bundle you want to create?",
"order": 1
}
},
"success_message": "\nYour bundle '{{.project_name}}' has been created."
}
範本架構欄位
databricks_template_schema.json
檔案支援定義輸入變數,以便從使用者於 properties
欄位中收集套件組合初始化期間的資訊,以及自定義初始化的其他欄位。
輸入變數定義於範本架構的 [properties
] 欄位中。 每個輸入變數都會定義在套件組合初始化期間向用戶呈現提示所需的元數據。 然後使用樣本變數語法存取變數的值,例如 {{.project_name}}
。
您也可以設定某些欄位的值,以自訂套件組合初始化程式。
下表列出支持的架構欄位。
架構欄位 | 描述 |
---|---|
properties |
組合包範本輸入變數定義。 Databricks 建議定義至少一個輸入變數,這是配套項目的名稱。 |
properties.<variable_name> |
輸入變數的名稱。 |
properties.<variable_name>.default |
如果使用者在執行 bundle init 命令時未提供 --config-file 值,或者在命令行提示輸入時未輸入值,則系統將使用預設值。 |
properties.<variable_name>.description |
與輸入變數相關聯的使用者提示訊息。 |
properties.<variable_name>.enum |
屬性的可能值清單,例如 "enum": ["azure", "aws", "gcp"] 。 如果定義此欄位,Databricks CLI 會在命令列的清單中顯示值,以提示使用者選取值。 |
properties.<variable_name>.order |
整數,定義輸入屬性的相對順序。 這會控制命令行上顯示這些輸入變數提示的順序。 |
properties.<variable_name>.pattern |
用來驗證使用者輸入的 regexp 模式,例如 "pattern": "^[^ .\\\\/]{3,}$" 。 如需支援的 regexp 語法,請參閱 https://github.com/google/re2/wiki/Syntax。 |
properties.<variable_name>.pattern_match_failure_message |
如果使用者輸入的值不符合指定的模式,則向使用者顯示的訊息,例如,Project name must be at least 3 characters long and cannot contain the following characters: \"\\\", \"/\", \" \" and \".\"." 。 |
properties.<variable_name>.skip_prompt_if |
如果組態已滿足此架構,請略過輸入變數的提示。 在此情況下,會改用 屬性的預設值。 如需範例,請參閱 mlops-stacks 範本。 只支援 const 比較。 |
properties.<variable_name>.skip_prompt_if.properties.<previous_variable_name>.const |
如果 <previous_variable_name> 的值符合 skip_prompt_if 中所設定的常數,則會略過提示 <variable_name> 。 |
welcome_message |
提示使用者輸入之前要輸出的第一則訊息。 |
success_message |
成功初始化範本之後要列印的訊息。 |
min_databricks_cli_version |
此 Databricks CLI 範本所需的最低語義化版本 (semver)。 如果 CLI 版本小於此版本,databricks bundle init 會失敗。 |
version |
保留供日後使用。 模式的版本。 這可用來判斷架構是否與目前的 CLI 版本相容。 |
組態範本
自定義套件組合範本應包含套件組合範本專案中 template
資料夾中的 databricks.yml.tmpl
檔案,該檔案是用來建立套件組合專案 databricks.yml
組態檔。 您可以在 resources
資料夾中建立資源的組態檔範本。 使用組態範本 YAML 填入這些範本檔案。
以下簡單的範例設定範本適用於 databricks.yml 和相關的 *_job.yml,以建立套件組合名稱和兩個目標環境,並定義一個作業,該作業在套件組合中執行筆記本,供使用此範本建立的套件組合使用。 這些配置模板利用 套件替代品 和 套件範本協助工具。
template/{{.project_name}}/databricks.yml.tmpl
:
# databricks.yml
# This is the configuration for the Databricks Asset Bundle {{.project_name}}.
bundle:
name: {{.project_name}}
include:
- resources/*.yml
targets:
# The deployment targets. See https://docs.databricks.com/en/dev-tools/bundles/deployment-modes.html
dev:
mode: development
default: true
workspace:
host: {{workspace_host}}
prod:
mode: production
workspace:
host: {{workspace_host}}
root_path: /Shared/.bundle/prod/${bundle.name}
{{- if not is_service_principal}}
run_as:
# This runs as {{user_name}} in production. Alternatively,
# a service principal could be used here using service_principal_name
user_name: {{user_name}}
{{end -}}
template/{{.project_name}}/resources/{{.project_name}}_job.yml.tmpl
:
# {{.project_name}}_job.yml
# The main job for {{.project_name}}
resources:
jobs:
{{.project_name}}_job:
name: {{.project_name}}_job
tasks:
- task_key: notebook_task
job_cluster_key: job_cluster
notebook_task:
notebook_path: ../src/simple_notebook.ipynb
job_clusters:
- job_cluster_key: job_cluster
new_cluster:
node_type_id: i3.xlarge
spark_version: 13.3.x-scala2.12
範本輔助工具和變數
範本協助程式是由 Databricks 提供的函式,您可以在範本檔案內使用,在運行時間取得使用者特定資訊,或與範本引擎互動。 您也可以定義自己的範本變數。
下列範本協助程式適用於 Databricks 套件組合範本專案。 如需使用 Go 範本和變數的相關信息,請參閱 Go 範本。
小幫手 | 描述 |
---|---|
{{url}} |
https://pkg.go.dev/net/url#Parse的別名。 這允許使用 url.URL 的所有方法。 |
{{regexp}} |
https://pkg.go.dev/regexp#Compile的別名。 這允許使用 regexp.Regexp 的所有方法。 |
{{random_int}} |
傳回一個位於半開區間 (0, n) 內的非負偽隨機整數。 |
{{uuid}} |
以字串的形式傳回 UUID,其為 128 位(16 位元組)通用唯一 IDentifier,如 RFC 4122 中所定義。此標識符在範本執行期間是穩定的,而且可用來填入範本作者在databricks.yml中的 bundle.uuid 字段。 |
{{bundle_uuid}} |
套件組合的唯一識別碼。 此函式的多個調用會傳回相同的 UUID。 |
{{pair}} |
鍵-值對。 這與 map 輔助工具搭配使用,以生成用於範本中的地圖。 |
{{map}} |
將成對列表轉換為映射物件。 這很適合將多個對象傳遞至程式庫目錄中定義的範本。 由於叫用範本的 Go 文字範本語法只允許指定單一自變數,因此此函式可用來因應該限制。 例如,在下列這一行中, {{template "my_template" (map (pair "foo" $arg1) (pair "bar" $arg2))}} 、$arg1 和 $arg2 可以從 my_template 內參照為 .foo 和 .bar 。 |
{{smallest_node_type}} |
傳回最小的節點類型。 |
{{path_separator}} |
作業系統的路徑分隔符字符。 這是 Unix 型系統的 / 和 Windows 的 \ 。 |
{{workspace_host}} |
使用者目前已驗證的工作區主機 URL。 |
{{user_name}} |
使用者初始化範本的完整名稱。 |
{{short_name}} |
使用者初始化範本的簡短名稱。 |
{{default_catalog}} |
傳回預設工作區目錄。 如果沒有預設值,或未啟用 Unity 目錄,這會傳回空字串。 |
{{is_service_principal}} |
目前使用者是否為服務主體。 |
{{ skip <glob-pattern-relative-to-current-directory> }} |
讓範本引擎略過產生符合輸入 glob 模式的所有檔案和目錄。 如需範例,請參閱 mlops-stacks 範本。 |
自訂範本輔助工具
若要定義您自己的範本協助程式,請在範本專案的 library
資料夾中建立範本檔案,並使用 Go 範本化語法來定義協助程式。 例如,library/variables.tmpl
檔案的下列內容會定義變數 cli_version
和 model_name
。 當此範本用來初始化套件組合時,會使用範本架構檔案中定義的 model_name
欄位來建構 input_project_name
變數的值。 這個欄位的值是提示之後的使用者輸入。
{{ define `cli_version` -}}
v0.240.0
{{- end }}
{{ define `model_name` -}}
{{ .input_project_name }}-model
{{- end }}
若要查看完整的範例,請參閱 mlops-stacks 範本變數檔案。
測試套件組合範本
最後,請務必測試您的範本。 例如,使用 Databricks CLI,使用上一節中定義的範本來初始化新的套件組合:
databricks bundle init basic-bundle-template
請輸入my_test_bundle
以回應What is your bundle project name?
的提示。
建立測試套件組合之後,就會輸出結構描述檔案的成功訊息。 如果您檢查 my_test_bundle
資料夾的內容,應該會看到下列內容:
my_test_bundle
├── databricks.yml
├── resources
│ └── my_test_bundle_job.yml
└── src
└── simple_notebook.ipynb
databricks.yml
檔案和作業現在已自訂:
# databricks.yml
# This is the configuration for the Databricks Asset Bundle my-test-bundle.
bundle:
name: my_test_bundle
include:
- resources/*.yml
targets:
# The 'dev' target, used for development purposes. See [_](https://docs.databricks.com/en/dev-tools/bundles/deployment-modes.html#development-mode)
dev:
mode: development
default: true
workspace:
host: https://my-host.cloud.databricks.com
# The 'prod' target, used for production deployment. See [_](https://docs.databricks.com/en/dev-tools/bundles/deployment-modes.html#production-mode)
prod:
mode: production
workspace:
host: https://my-host.cloud.databricks.com
root_path: /Shared/.bundle/prod/${bundle.name}
run_as:
# This runs as someone@example.com in production. Alternatively,
# a service principal could be used here using service_principal_name
user_name: someone@example.com
# my_test_bundle_job.yml
# The main job for my_test_bundle
resources:
jobs:
my_test_bundle_job:
name: my_test_bundle_job
tasks:
- task_key: notebook_task
job_cluster_key: job_cluster
notebook_task:
notebook_path: ../src/simple_notebook.ipynb
job_clusters:
- job_cluster_key: job_cluster
new_cluster:
node_type_id: i3.xlarge
spark_version: 13.3.x-scala2.12
共用範本
如果您想要與其他人共用此套件組合範本,可將其儲存於 Git 支援且您的使用者可存取的提供者版本控制中。 要使用 Git URL 執行 bundle init
命令,請確定 databricks_template_schema.json
檔案位於相對於該 Git URL 的根位置。
提示
您可以將 databricks_template_schema.json
檔案放在相對於套件組合根目錄的不同資料夾中。 然後,您可以使用 bundle init
命令的 --template-dir
選項來參考包含 databricks_template_schema.json
檔案的該資料夾。
下一步
- 瀏覽 Databricks 所建立和維護的其他範本。 請參閱 GitHub 中的套件組件範例存放庫。
- 若要搭配 Databricks Asset Bundles 範本使用 MLOps Stacks,請參閱Databricks Asset Bundles for MLOps Stacks。
- 深入了解 Go 套件範本化。 請參閱 Go 套件範本文件。