Руководство. Создание первого пользовательского шаблона пакета ресурсов Databricks
В этом руководстве вы создадите пользовательский шаблон пакета ресурсов Databricks для создания пакетов, которые выполняют задание с определенной задачей Python в кластере с использованием определенного образа контейнера Docker.
Перед началом работы
Установите интерфейс командной строки Databricks версии 0.218.0 или более поздней. Если вы уже установили его, убедитесь, что версия 0.218.0 или более поздняя, выполнив команду databricks -version
из командной строки.
Определение переменных запроса пользователя
Первым шагом в создании шаблона пакета является определение переменных пользовательского databricks bundle init
запроса. Из командной строки.
Создайте пустой каталог с именем
dab-container-template
:mkdir dab-container-template
В корневом каталоге создайте файл с именем
databricks_template_schema.json
:cd dab-container-template touch databricks_template_schema.json
Добавьте следующее содержимое
databricks_template_schema.json
в файл и сохраните его. Каждая переменная будет переведена в запрос пользователя во время создания пакета.{ "properties": { "project_name": { "type": "string", "default": "project_name", "description": "Project name", "order": 1 } } }
Создание структуры папок пакета
Затем в каталоге шаблонов создайте подкаталоги с именем resources
и src
. Папка template
содержит структуру каталогов для созданных пакетов. Имена подкаталогов и файлов будут следовать синтаксису шаблона пакета Go, если они выведены на основе пользовательских значений.
mkdir -p "template/resources"
mkdir -p "template/src"
Добавление шаблонов конфигурации YAML
В каталоге template
создайте файл с именем databricks.yml.tmpl
и добавьте следующий YAML:
touch template/databricks.yml.tmpl
# This is a Databricks asset bundle definition for {{.project_name}}.
# See https://docs.databricks.com/dev-tools/bundles/index.html for documentation.
bundle:
name: {{.project_name}}
include:
- resources/*.yml
targets:
# The 'dev' target, used for development purposes.
# Whenever a developer deploys using 'dev', they get their own copy.
dev:
# We use 'mode: development' to make sure everything deployed to this target gets a prefix
# like '[dev my_user_name]'. Setting this mode also disables any schedules and
# automatic triggers for jobs and enables the 'development' mode for Delta Live Tables pipelines.
mode: development
default: true
workspace:
host: {{workspace_host}}
# The 'prod' target, used for production deployment.
prod:
# For production deployments, we only have a single copy, so we override the
# workspace.root_path default of
# /Workspace/Users/${workspace.current_user.userName}/.bundle/${bundle.target}/${bundle.name}
# to a path that is not specific to the current user.
#
# By making use of 'mode: production' we enable strict checks
# to make sure we have correctly configured this target.
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
# (see Databricks documentation).
user_name: {{user_name}}
{{end -}}
Создайте другой файл YAML с именем {{.project_name}}_job.yml.tmpl
и поместите его в template/resources
каталог. Этот новый файл YAML разделяет определения заданий проекта от остальной части определения пакета. Добавьте следующий YAML в этот файл, чтобы описать задание шаблона, содержащее определенную задачу Python для запуска в кластере заданий с помощью определенного образа контейнера Docker:
touch template/resources/{{.project_name}}_job.yml.tmpl
# The main job for {{.project_name}}
resources:
jobs:
{{.project_name}}_job:
name: {{.project_name}}_job
tasks:
- task_key: python_task
job_cluster_key: job_cluster
spark_python_task:
python_file: ../src/{{.project_name}}/task.py
job_clusters:
- job_cluster_key: job_cluster
new_cluster:
docker_image:
url: databricksruntime/python:10.4-LTS
node_type_id: i3.xlarge
spark_version: 13.3.x-scala2.12
В этом примере используется базовый образ контейнера Docker по умолчанию Databricks, но вместо этого можно указать собственный пользовательский образ.
Добавление файлов, на которые ссылается ваша конфигурация
Затем создайте каталог и создайте template/src/{{.project_name}}
файл задачи Python, на который ссылается задание в шаблоне:
mkdir -p template/src/{{.project_name}}
touch template/src/{{.project_name}}/task.py
Теперь добавьте следующее task.py
:
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.master('local[*]').appName('example').getOrCreate()
print(f'Spark version{spark.version}')
Проверка структуры шаблона пакета
Просмотрите структуру папок проекта шаблона пакета. Он должен выглядеть так:
.
├── databricks_template_schema.json
└── template
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── {{.project_name}}
└── task.py
Тестирование шаблона
Наконец, протестируйте шаблон пакета. Чтобы создать пакет на основе нового пользовательского шаблона, используйте команду databricks bundle init
, указав новое расположение шаблона. Из корневой папки проектов пакета:
mkdir my-new-container-bundle
cd my-new-container-bundle
databricks bundle init dab-container-template
Следующие шаги
- Создайте пакет, который развертывает записную книжку в рабочей области Azure Databricks, а затем запускает развернутую записную книжку в качестве задания Azure Databricks. См. статью "Разработка задания в Azure Databricks с помощью пакетов ресурсов Databricks".
- Создайте пакет, который развертывает записную книжку в рабочей области Azure Databricks, а затем запускает развернутую записную книжку в качестве конвейера Delta Live Tables. См. статью Создание конвейеров Delta Live Tables с помощью пакетов активов Databricks.
- Создайте пакет, который развертывает и запускает стек MLOps. Ознакомьтесь с пакетами ресурсов Databricks для стеков MLOps.
- Добавьте пакет в рабочий процесс CI/CD (непрерывная интеграция и непрерывное развертывание) в GitHub. См . сведения о выполнении рабочего процесса CI/CD с помощью пакета ресурсов Databricks и GitHub Actions.