Konfigurowanie i pakowanie deklaratywnych pakietów automatyzacji

Ukończone

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.

Diagram wyjaśniający pakiety automatyzacji deklaratywnej.

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.