Sdílení balíčků a souborů balíčků

Organizace často udržují mnoho sad a v těchto pokročilejších scénářích CI/CD tyto sady sdílejí společnou konfiguraci a soubory. Sady prostředků můžou například sdílet knihovny uložené ve sdíleném umístění nebo v konfiguračním souboru ve sdíleném umístění můžou být definovány výpočetní nastavení a proměnné.

Tento článek obsahuje informace o konfiguraci dvou sad pro použití konfigurace a souborů ve sdílené složce. Kompletní příklady sdílených sad jsou v úložišti GitHubu s příklady sady.

Další osvědčené postupy CI/CD a vývojáře najdete v pracovních postupech CI/CD v Databricks a osvědčených postupech pro vývojáře v Databricks.

Struktura úložiště

Běžným postupem a doporučením Databricks je uložit zdroj pro mnoho sad v jednom úložišti se sdílenou složkou.

Příkladem struktury úložiště s více než jednou sadou může být:

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

Konfigurace pro sdílení souborů

Pokud chcete zahrnout soubory kódu mimo sadu, zadejte je v paths klíči mapování synchronizace.

Například složce shared v úložišti (na stejné úrovni jako složky sady), která obsahuje:

  • shared_library.py soubor kódu s obsahem:

    def multiply(a: int, b: int) -> int:
      return a * b
    
  • a variables.yml s obsahem:

    variables:
      cluster_id:
        default: 1234-567890-abcde123
    

Pak bude konfigurace sady, která používá soubor sdíleného kódu a proměnnou sady definovanou ve sdílené konfiguraci:

# 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.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)

Ověření balíčku

Je důležité vždy ověřit konfiguraci sady prostředků, a to zejména v případě, že vaše sady sdílejí soubory a konfiguraci. Příkaz databricks bundle validate zajistí, že proměnné, soubory a cesty zadané ve vaší sadě existují a jsou správně zděděné a nakonfigurované a zobrazí informace o problémech, abyste je mohli před nasazením opravit. Podívejte se na databricks bundle validate.

Před nasazením spusťte následující příkaz pro každou sadu:

databricks bundle validate

Oprávnění ke sdíleným balíčkům

V rámci organizace se balíčky často vyvíjejí, nasazují a provozují různými jednotlivci s různými zodpovědnostmi a úrovněmi oprávnění. Všichni uživatelé můžou mít možnost zobrazit sady prostředků, někteří potřebují mít možnost nasadit změny sady a spouštět prostředky v cílovém vývojovém pracovním prostoru, několik z nich musí být schopné nasadit změny sady prostředků a spouštět prostředky v produkčním prostředí a automatizované pracovní postupy, které používají instanční objekt, musí být schopné spouštět prostředky v sadě. Pokud chcete zajistit efektivní správu sdílených sad všemi uživateli ve vaší organizaci, nastavte oprávnění nejvyšší úrovně a také produkční cílová oprávnění. Pokud potřebujete informace o oprávněních na nejvyšší úrovni, které se vztahují na všechny prostředky v balíčku, podívejte se na oprávnění.

Návod

Deklarativní balíčky automatizace v pracovním prostoru umožňují snadnou spolupráci na balíčcích. Podívejte se na Spolupráce na svazcích v pracovním prostředí.

Například pro databricks.yml sdílený balíček může být:

# 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