Шаблоны проектов пакета активов Databricks
Пакеты ресурсов Databricks описывают ресурсы Databricks, такие как задания, конвейеры и записные книжки в качестве исходных файлов, позволяют включать метаданные вместе с этими исходными файлами для подготовки инфраструктуры и других ресурсов, а также предоставлять комплексное определение проекта, все упакованные в виде одного развертываемого проекта. См. раздел "Что такое пакеты ресурсов Databricks?".
Шаблоны пакетов позволяют пользователям создавать пакеты в согласованном, повторяемом режиме, устанавливая структуры папок, шаги сборки и задачи, тесты и другие атрибуты инфраструктуры как кода (IaC) DevOps, распространенные в конвейере развертывания.
Например, при обычном выполнении заданий Databricks, требующих пользовательских пакетов с длительным шагом компиляции при установке, можно ускорить цикл разработки, создав шаблон пакета, указывающий настраиваемую среду контейнера.
Databricks предоставляет набор шаблонов пакетов по умолчанию , но вы также можете создавать пользовательские шаблоны пакетов. Затем пользователи могут инициализировать пакеты с помощью команды инициализации пакета , указав шаблон по умолчанию или настраиваемый шаблон.
Создание пакета с помощью шаблона
Чтобы использовать шаблон пакета Azure Databricks для создания пакета, используйте команду cli 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 |
Шаблон для использования SQL с Databricks. Этот шаблон содержит файл конфигурации, определяющий задание, которое выполняет SQL-запросы в хранилище SQL. См. default-sql. |
dbt-sql |
Шаблон, который использует dbt-core для локальной разработки и пакетов для развертывания. Этот шаблон содержит конфигурацию, определяющую задание с задачей dbt, а также файл конфигурации, описывающий профили dbt для развернутых заданий. Смотрите dbt-sql. |
mlops-stacks |
Расширенный шаблон полного стека для запуска новых проектов MLOps Stacks. См. mlops-stacks и наборы ресурсов Databricks для MLOps Stacks. |
Пользовательские шаблоны наборов
Шаблоны пакетов используют синтаксис шаблонов пакетов 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-файл в корневом каталоге этого проекта. Этот файл определяет поля, используемые интерфейсом командной строки Databricks при выполнении команды bundle init
, например текста запроса.
Следующий базовый файл databricks_template_schema.json
определяет входную переменную project_name
для проекта пакета, включающую сообщение запроса и значение по умолчанию. Затем определяется сообщение об успешной инициализации проекта "bunde", которое использует входное значение переменной в сообщении.
{
"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 |
Значение по умолчанию, которое используется, если пользователь не предоставил значение с помощью --config-file в рамках команды bundle init или в командной строке, когда у них запрашивается это значение. |
properties.<variable_name>.description |
Сообщение запроса пользователя, связанное с входной переменной. |
properties.<variable_name>.enum |
Список возможных значений для свойства, например "enum": ["azure", "aws", "gcp"] . Если это поле определено, интерфейс командной строки Databricks представляет значения в списке в командной строке, чтобы отправить пользователю запрос на выбор значения. |
properties.<variable_name>.order |
Целое число, определяющее относительный порядок входных свойств. Это определяет порядок, в котором отображаются запросы для этих входных переменных в командной строке. |
properties.<variable_name>.pattern |
Шаблон регулярного выражения, который следует использовать для проверки правильности ввода пользователя, например "pattern": "^[^ .\\\\/]{3,}$" . Для получения информации о поддерживаемом синтаксисе регулярных выражений см. 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 в формате semver, требуемая шаблоном.
databricks bundle init завершается ошибкой, если версия CLI меньше указанной версии. |
version |
Зарезервировано для дальнейшего использования. Версия схемы. Используется для определения совместимости схемы с текущей версией CLI. |
Шаблоны конфигурации
Шаблон пользовательского пакета должен содержать файл databricks.yml.tmpl
в папке template
в проекте шаблона пакета, который используется для создания файла конфигурации проекта пакета 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}} |
Возвращает, как int, неотрицательное псевдо-случайное число в полуоткрытом интервале (0,n). |
{{uuid}} |
Возвращает строку, представляющую UUID, который является 128-разрядным (16 байт) универсальным уникальным идентификатором, как определено в RFC 4122. Этот идентификатор является стабильным в течение срока выполнения шаблона и может использоваться для заполнения поля bundle.uuid в databricks.yml авторами шаблонов. |
{{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> }} |
Позволяет обработчику шаблонов пропускать создание всех файлов и каталогов, которые соответствуют входной схеме глобов. Пример см. в шаблоне 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 для инициализации нового пакета с помощью шаблона, определенного в предыдущих разделах:
databricks bundle init basic-bundle-template
Для запроса What is your bundle project name?
введите my_test_bundle
.
После создания тестового пакета сообщение об успешном выполнении из файла схемы выводится. Если просмотреть содержимое 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, и к которым у пользователей есть доступ. Чтобы выполнить bundle init
команду с URL-адресом Git, убедитесь, что databricks_template_schema.json
файл находится в корневом расположении относительно этого URL-адреса Git.
Совет
Файл можно поместить databricks_template_schema.json
в другую папку по сравнению с корневым каталогом пакета. Затем можно использовать параметр команды bundle init
--template-dir
для ссылки на эту папку, в которой находится файл databricks_template_schema.json
.
Следующие шаги
- Просмотрите дополнительные шаблоны, созданные и поддерживаемые Databricks. См. репозиторий примеров пакетов в GitHub.
- Чтобы использовать стеки MLOps с шаблонами наборов ресурсов Databricks, см. раздел Наборы ресурсов Databricks для стеков MLOps.
- Узнайте больше о шаблонизации пакетов Go. Ознакомьтесь с документацией шаблона пакета Go.