Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Организации часто поддерживают множество пакетов, и в этих более сложных сценариях CI/CD эти пакеты совместно используют общую конфигурацию и файлы. Например, пакеты могут совместно использовать библиотеки, хранящиеся в общем расположении, или параметры вычислений и переменные могут быть определены в файле конфигурации в общем расположении.
В этой статье содержатся сведения о настройке двух пакетов для использования конфигурации и файлов в общей папке. Полные примеры общего пакета находятся в репозитории GitHub.
Дополнительные рекомендации по CI/CD и лучшие практики для разработчиков см. в материалах Рабочие процессы CI/CD в Databricks и Лучшие практики для разработчиков в Databricks.
Структура репозитория
Распространенная практика и рекомендация Databricks — хранить источник для многих пакетов в одном репозитории с общей папкой.
Пример структуры репозитория с несколькими пакетами может быть:
databricks-bundle-repo/
├── shared
│ ├── variables.yml # has variable definitions like cluster_id
│ └── shared_library.py # has shared code used in multiple bundles
├── job_bundle
│ ├── databricks.yml # uses ${var.cluster_id} defined in variables.yml
│ ├── resources/
│ │ └── job_bundle.job.yml
│ ├── src/
│ │ ├── notebook.ipynb
│ │ └── my_python.py # uses ../shared/shared_library.py
│ └── README.md
├── pipeline_bundle
│ ├── databricks.yml
│ ├── resources/
│ │ ├── pipeline_bundle.job.yml # uses ${var.cluster_id} defined in variables.yml
│ │ └── pipeline_bundle.pipeline.yml
│ ├── src/
│ │ └── my_pipeline.ipynb
│ └── README.md
Настройка общего доступа к файлам
Чтобы включить файлы кода за пределами пакета, укажите их в paths ключе сопоставления синхронизации.
Например, учитывая папку shared в репозитории (на том же уровне, что и папки пакета), которая содержит:
shared_library.pyфайл кода с содержимым:def multiply(a: int, b: int) -> int: return a * ba
variables.ymlс содержимым:variables: cluster_id: default: 1234-567890-abcde123
Затем конфигурация пакета, использующая общий файл кода и переменную пакета, определенную в общей конфигурации, будет:
# databricks.yml
bundle:
name: job_bundle
sync:
paths:
- ../shared
- ./src
include:
- resources/*.yml
- ../shared/*.yml
targets:
dev:
mode: development
default: true
workspace:
host: https://my-workspace.cloud.databricks.com
prod:
mode: production
workspace:
host: https://my-workspace.cloud.databricks.com
root_path: /Workspace/Users/someone@example.com/.bundle/${bundle.name}/${bundle.target}
permissions:
- user_name: someone@example.com
level: CAN_MANAGE
# job_bundle.job.yml
resources:
jobs:
my_python_job:
name: my_python_job
tasks:
- task_key: python_task
spark_python_task:
python_file: src/my_python.py # uses ../shared/shared_library.py
my_notebook_job:
name: my_notebook_job
tasks:
- task_key: notebook_task
existing_cluster_id: ${var.cluster_id} # defined in ../shared/variables.yml
notebook_task:
notebook_path: src/notebook.ipynb
# my_python.py
import os
import sys
# Traverse to the sync root path.
# Note: this requires :re[DBR] >= 14 or serverless.
shared_path = os.getcwd() + "/../../shared"
# Add the shared directory to the Python path.
sys.path.append(shared_path)
# Import a function from shared_library.py
from shared_library import multiply
# Use the function.
result = multiply(2, 3)
print(result)
Проверка комплекта
Важно всегда проверять конфигурацию пакета, особенно если пакеты совместно используют файлы и конфигурацию. Команда databricks bundle validate гарантирует наличие переменных, файлов и путей, указанных в пакете, и правильно наследуется и настраивается, а также выводит сведения о проблемах, чтобы их можно было исправить перед развертыванием. См. databricks bundle validate.
Выполните следующую команду для каждого пакета перед развертыванием:
databricks bundle validate
Разрешения для общих пакетов
В организации пакеты часто разрабатываются, развертываются и выполняются различными лицами с различными обязанностями и уровнями разрешений. Все пользователи, возможно, должны иметь возможность просматривать пакеты, некоторые из них должны иметь возможность развертывать изменения пакета и запускать ресурсы в целевой рабочей области разработки, некоторые из них должны иметь возможность развертывать изменения пакета и запускать ресурсы в рабочей среде, а также автоматизированные рабочие процессы, использующие субъект-службу, должны иметь возможность запускать ресурсы в пакете. Чтобы обеспечить эффективное управление общими пакетами всеми пользователями в организации, задайте разрешения верхнего уровня, а также рабочие целевые разрешения. Сведения о разрешениях верхнего уровня, которые применяют разрешения ко всем ресурсам в пакете, см. в разделе "Разрешения".
Подсказка
Декларативные пакеты автоматизации в рабочей области позволяют легко сотрудничать над пакетами. См. Совместная работа над пакетами в рабочей области.
Например, databricks.yml для общего пакета может быть:
# databricks.yml
bundle:
name: shared_bundle
include:
- resources/*.yml
permissions:
- level: CAN_VIEW
group_name: all_users
- level: CAN_MANAGE
group_name: data_engineering_users
- level: CAN_RUN
service_principal_name: 123456-abcdef
targets:
dev:
mode: development
default: true
workspace:
host: https://my-workspace.cloud.databricks.com
prod:
mode: production
workspace:
host: https://my-workspace.cloud.databricks.com
root_path: /Workspace/Users/someone@example.com/.bundle/${bundle.name}/${bundle.target}
permissions:
- user_name: someone@example.com
level: CAN_MANAGE