Konfigurowanie i pakowanie deklaratywnych pakietów automatyzacji
Wskazówka
Aby uzyskać więcej szczegółów, zobacz kartę Tekst i obrazy .
Podczas pracy nad projektami inżynierii danych potrzebujesz systematycznego sposobu definiowania, tworzenia pakietów i wdrażania zasobów usługi Databricks w różnych środowiskach. Pakiety deklaratywnej automatyzacji (wcześniej znane jako pakiety zasobów usługi Databricks) zapewniają podejście do infrastruktury jako kodu , które umożliwia opisywanie zadań, potoków i innych zasobów w plikach konfiguracji YAML. Konfigurując i dostosowując te pakiety, można zautomatyzować wdrożenia i zapewnić spójność między obszarami roboczymi programowania i produkcji.
Uwaga / Notatka
Konfigurację pakietu można również wyrazić w Python, co umożliwia definiowanie zadań i zasobów jako kodu Python zamiast kodu YAML. Ta lekcja koncentruje się na konfiguracji opartej na języku YAML, która jest najbardziej typowym podejściem. Aby dowiedzieć się więcej, zobacz sekcję Konfiguracja Bundle w języku Python.
Omówienie struktury konfiguracji pakietu
Pakiet deklaratywnej automatyzacji składa się z plików konfiguracji YAML , które definiują zasoby projektu i ustawienia wdrożenia. Podstawowy plik konfiguracji , databricks.ymlmusi istnieć w katalogu głównym projektu pakietu. Ten plik ustanawia tożsamość pakietu i może odwoływać się do dodatkowych plików konfiguracji w celu uzyskania lepszej organizacji.
Plik databricks.yml zawiera kilka kluczowych sekcji, które kontrolują zachowanie pakietu:
bundle:
name: my-data-pipeline
include:
- resources/*.yml
workspace:
host: https://adb-1234567890123456.7.azuredatabricks.net
resources:
jobs:
daily-ingestion-job:
name: daily-ingestion-job
tasks:
- task_key: ingest-data
notebook_task:
notebook_path: ./notebooks/ingest.py
targets:
dev:
default: true
prod:
workspace:
host: https://adb-9876543210987654.3.azuredatabricks.net
Mapowanie pakietu definiuje nazwę programową pakietu. Mapowanie zasobów określa zasoby usługi Databricks, które chcesz wdrożyć, takie jak zadania i potoki. Mapowanie obiektów docelowych definiuje różne środowiska wdrażania, z których każdy potencjalnie wskazuje różne obszary robocze z różnymi konfiguracjami.
Wskazówka
Podziel konfigurację na oddzielne pliki dla zasobów i obiektów docelowych, aby zachować możliwość zarządzania konfiguracjami. Użyj mapowania include, aby odwołać się do dodatkowych plików YAML w pakiecie.
Dostosowywanie parametrów wdrożenia za pomocą zmiennych
Zmienne sprawiają, że konfiguracje zestawów są elastyczne i ponownie używalne w różnych środowiskach. Zamiast trwale zapisywać wartości, takie jak identyfikatory klastra lub nazwy zadań, należy zdefiniować zmienne, które można ustawić inaczej dla każdego miejsca docelowego wdrożenia.
Aby zdefiniować zmienną, dodaj ją do sekcji zmiennych konfiguracji:
variables:
cluster_id:
description: The cluster to use for job execution
default: 1234-567890-abcde123
environment:
description: The deployment environment name
default: development
resources:
jobs:
my-job:
name: ${var.environment}-data-pipeline
tasks:
- task_key: process-data
existing_cluster_id: ${var.cluster_id}
notebook_task:
notebook_path: ./notebooks/process.py
Składnia podstawiania${var.variable_name} wstawia wartość zmiennej tam, gdzie się do niej odwołujesz. Takie podejście umożliwia użycie tej samej konfiguracji pakietu podczas dostosowywania określonych parametrów dla różnych środowisk.
Możesz podać wartości zmiennych na kilka sposobów:
- Ustawianie wartości domyślnych w definicji zmiennej
- Zastępowanie wartości w konfiguracjach specyficznych dla elementu docelowego
- Przekazywanie wartości za pośrednictwem opcji wiersza polecenia:
--var="cluster_id=5678-901234-fghij567" - Używanie zmiennych środowiskowych z prefiksem
BUNDLE_VAR_
Podczas wdrażania w różnych miejscach docelowych można zastąpić wartości zmiennych dla każdego środowiska:
targets:
dev:
default: true
variables:
cluster_id: 1234-567890-abcde123
environment: development
prod:
variables:
cluster_id: 9876-543210-zyxwv987
environment: production
Konfigurowanie zasobów i definicji zadań
Sekcja zasobów definiuje obiekty usługi Databricks, którymi zarządza pakiet. Zadania są najczęstszym typem zasobu i można skonfigurować różne typy zadań w ramach każdego zadania.
Definicja zadania zawiera nazwę zadania, zadania i ustawienia opcjonalne, takie jak harmonogramy i powiadomienia:
resources:
jobs:
etl-pipeline:
name: etl-pipeline
tasks:
- task_key: extract-task
notebook_task:
notebook_path: ./notebooks/extract.py
- task_key: transform-task
depends_on:
- task_key: extract-task
notebook_task:
notebook_path: ./notebooks/transform.py
base_parameters:
source_table: ${var.source_table}
Każde zadanie określa jego typ, taki jak notebook_task do uruchamiania notesów lub spark_python_task dla skryptów języka Python. To depends_on ustawienie tworzy zależności zadań, zapewniając, że zadania są uruchamiane w odpowiedniej kolejności. Parametry przekazywane base_parameters umożliwiają dostosowanie zachowania zadania w czasie wykonywania.
Ważne
Podczas konfigurowania zadań należy używać ścieżek względem lokalizacji pliku konfiguracji, w którym je deklarujesz. Interfejs wiersza polecenia (CLI) Databricks rozwiązuje te ścieżki podczas wdrażania pakietu w twoim obszarze roboczym.
W przypadku konfiguracji obliczeniowej można odwoływać się do istniejących klastrów lub definiować klastry zadań:
resources:
jobs:
my-job:
job_clusters:
- job_cluster_key: shared-cluster
new_cluster:
spark_version: 16.4.x-scala2.12
node_type_id: Standard_DS3_v2
num_workers: 2
tasks:
- task_key: my-task
job_cluster_key: shared-cluster
notebook_task:
notebook_path: ./notebooks/analysis.py
Konfigurowanie obiektów docelowych wdrożenia
Obiekty docelowe reprezentują różne środowiska wdrażania, z których każda ma własne przesłonięcia konfiguracji. Typowy pakiet zawiera obiekty docelowe programowania i produkcji z odrębnymi adresami URL i ustawieniami obszaru roboczego.
Tryb programowania automatycznie stosuje zachowania upraszczające testowanie:
targets:
dev:
default: true
mode: development
Podczas wdrażania za pomocą mode: development CLI, prefiksy nazw zasobów są dodawane z [dev username], wstrzymuje wszystkie harmonogramy i włącza współbieżne uruchomienia zadań. Domyślne ustawienia pomagają zapobiec zakłócaniu przez zasoby programistyczne pracy obciążeń produkcyjnych.
Tryb produkcyjny wymusza bardziej rygorystyczną walidację:
targets:
prod:
mode: production
workspace:
host: https://adb-prod.7.azuredatabricks.net
W trybie produkcyjnym interfejs wiersza polecenia sprawdza, czy lokalna gałąź Git jest zgodna z gałęzią określoną dla elementu docelowego (opcjonalne mapowanie git) i zaleca używanie nazw głównych usług do wdrożeń. Te zachowania można dostosować za pomocą mapowania ustawień wstępnych :
targets:
staging:
presets:
name_prefix: staging_
trigger_pause_status: PAUSED
tags:
environment: staging
Ustawienia wstępne umożliwiają dostosowanie zachowań wdrażania bez polegania wyłącznie na domyślnych ustawieniach programowania lub trybu produkcyjnego. Ta elastyczność jest przydatna w przypadku środowisk przejściowych lub wyspecjalizowanych scenariuszy wdrażania.
Po zakończeniu konfiguracji pakietu możesz zweryfikować i wdrożyć zasoby. Polecenie databricks bundle validate sprawdza konfigurację pod kątem błędów przed wdrożeniem, wypychając databricks bundle deploy zasoby do docelowego obszaru roboczego.