Udostępnij za pośrednictwem


Przykłady konfiguracji pakietu

W tym artykule przedstawiono przykładową konfigurację pakietów deklaratywnych automatyzacji (wcześniej znanych jako pakiety zasobów usługi Databricks) i typowe przypadki użycia pakietu.

Kompletne przykłady pakietów, opisane w poniższej tabeli, są dostępne w repozytorium GitHub bundle-examples:

Nazwa pakietu Opis
app_with_database Pakiet z aplikacją Databricks, wspieraną przez bazę danych Postgres OLTP
dashboard_nyc_taxi Pakiet z pulpitem nawigacyjnym AI/BI i zadaniem, które przechwytuje jego migawkę i wysyła ją w wiadomości e-mail do subskrybenta.
database_with_catalog Pakiet definiujący wystąpienie bazy danych OLTP i katalog bazy danych
databricks_app Pakiet definiujący aplikację Databricks
klaster_rozwojowy Pakiet, który definiuje i wykorzystuje klaster deweloperski (uniwersalny)
job_read_secret Pakiet, który definiuje tajny zakres i zadanie z zadaniem odczytującym z niego
zadanie_z_kilkoma_kółkami Pakiet, który definiuje zadanie z wieloma zależnościami koła i używa go
job_with_run_job_tasks Pakiet z wieloma zadaniami zawierający zadania uruchamiania zadań
job_with_sql_notebook Pakiet z zadaniem wykorzystującym funkcję notesu SQL
pipeline_with_schema Pakiet, który definiuje schemat Unity Catalog i potok, który go używa
private_wheel_packages Pakiet korzystający z pakietu prywatnego koła z zadania
python_wheel_poetry Pakiet, który tworzy whl za pomocą Poetry
serverless_job Pakiet, który używa bezserwerowych zasobów obliczeniowych do uruchamiania zadania
share_files_across_bundles Pakiet zawierający pliki znajdujące się poza katalogiem głównym pakietu.
spark_jar_task Zestaw, który definiuje i wykorzystuje zadanie Spark JAR
zapisz_z_zadania_na_wolumin Pakiet, który zapisuje plik w woluminie Unity Catalog

Scenariusze pakietu

Ta sekcja zawiera przykłady konfiguracji, które pokazują użycie mapowań pakietów najwyższego poziomu. Zobacz Informacje o konfiguracji.

pakiet, który przekazuje plik JAR do Unity Catalog

Woluminy Unity Catalog można określić jako ścieżkę artefaktu, aby wszystkie artefakty, takie jak pliki JAR i pliki koła, były przekazywane do woluminów Unity Catalog. Poniższy przykładowy pakiet buduje i przesyła plik JAR do Unity Catalog. Aby uzyskać informacje na temat mapowania artifact_path, odwołaj się do workspace.artifact_path. Aby uzyskać informacje na temat artifacts, odwołaj się do artefaktów .

bundle:
  name: jar-bundle

workspace:
  host: https://myworkspace.cloud.databricks.com
  artifact_path: /Volumes/main/default/my_volume

artifacts:
  my_java_code:
    path: ./sample-java
    build: 'javac PrintArgs.java && jar cvfm PrintArgs.jar META-INF/MANIFEST.MF PrintArgs.class'
    files:
      - source: ./sample-java/PrintArgs.jar

resources:
  jobs:
    jar_job:
      name: 'Spark Jar Job'
      tasks:
        - task_key: SparkJarTask
          new_cluster:
            num_workers: 1
            spark_version: '14.3.x-scala2.12'
            node_type_id: 'i3.xlarge'
          spark_jar_task:
            main_class_name: PrintArgs
          libraries:
            - jar: ./sample-java/PrintArgs.jar

Konfiguracja pulpitu nawigacyjnego

Ta sekcja zawiera przykłady konfiguracji pulpitu nawigacyjnego. Aby uzyskać szczegółowe informacje o konfiguracji pulpitu nawigacyjnego, zobacz pulpit nawigacyjny.

Katalog pulpitu nawigacyjnego i parametryzacja schematu

Podczas wdrażania pulpitu nawigacyjnego za pomocą pakietów Deklaratywnej Automatyzacji można zdefiniować pojedynczy katalog i schemat dla zestawów danych, korzystając z pól dataset_catalog i dataset_schemazasobu pulpitu nawigacyjnego.

Uwaga / Notatka

Aby sparametryzować odwołania do określonej tabeli wewnątrz bazy danych SQL, możesz użyć current_catalog() funkcji .

Poniższa przykładowa konfiguracja pakietu definiuje zmienne do ustawiania wartości katalogu i schematu dla celów dev i prod. Przyjęto założenie, że w nyc_taxi_trip_analysis.lvdash.json folderze pakietu znajduje się pliksrc.

bundle:
  name: dashboard-bundle

variables:
  warehouse_id:
    description: Warehouse
    default: baf79a9e4ze90f02
  catalog_name:
    description: 'Catalog name'
    default: test_catalog
  schema_name:
    description: 'Schema name'
    default: ${workspace.current_user.short_name}

resources:
  dashboards:
    nyc_taxi_trip_analysis:
      display_name: 'NYC Taxi Trip Analysis'
      file_path: src/nyc_taxi_trip_analysis.lvdash.json
      warehouse_id: ${var.warehouse_id}
      dataset_catalog: ${var.catalog}
      dataset_schema: ${var.schema}

targets:
  dev:
    mode: development
    default: true
    workspace:
      host: https://myworkspace.cloud.databricks.com
    variables:
      catalog: dev_catalog
      schema: ${workspace.current_user.short_name}

  prod:
    mode: production
    workspace:
      host: https://myworkspace.cloud.databricks.com
      root_path: /Workspace/Users/someone@example.com/.bundle/${bundle.name}/${bundle.target}
    variables:
      catalog_name: prod_catalog
      schema_name: prod_schema
    permissions:
      - user_name: someone@example.com
        level: CAN_MANAGE

Konfiguracja zadania

Ta sekcja zawiera przykłady konfiguracji zadań. Aby uzyskać szczegółowe informacje o konfiguracji zadania, zobacz zadanie.

Zadanie korzystające z obliczeń bezserwerowych

Pakiety deklaratywne automatyzacji obsługują zadania uruchamiane w bezserwerowych obliczeniach. Zobacz Run your Lakeflow Jobs with serverless compute for workflows (Uruchamianie zadań lakeflow z bezserwerowymi obliczeniami dla przepływów pracy). Aby to skonfigurować, możesz pominąć ustawienie clusters dla zadania typu notebook lub określić środowisko, jak pokazano w przykładach poniżej. W przypadku skryptów Python, wheel Python i zadań dbt, environment_key jest wymagana dla obliczeń bezserwerowych. Zobacz environment_key.

# A serverless job (no cluster definition)
resources:
  jobs:
    serverless_job_no_cluster:
      name: serverless_job_no_cluster

      email_notifications:
        on_failure:
          - someone@example.com

      tasks:
        - task_key: notebook_task
          notebook_task:
            notebook_path: ../src/notebook.ipynb
# A serverless job (environment spec)
resources:
  jobs:
    serverless_job_environment:
      name: serverless_job_environment

      tasks:
        - task_key: task
          spark_python_task:
            python_file: ../src/main.py

          # The key that references an environment spec in a job.
          # https://docs.databricks.com/api/workspace/jobs/create#tasks-environment_key
          environment_key: default

      # A list of task execution environment specifications that can be referenced by tasks of this job.
      environments:
        - environment_key: default

          # Full documentation of this spec can be found at:
          # https://docs.databricks.com/api/workspace/jobs/create#environments-spec
          spec:
            environment_version: '2'
            dependencies:
              - my-library

Zadanie z wieloma plikami wheel

Poniższe przykładowe konfiguracje definiują pakiet zawierający zadanie z wieloma *.whl plikami.

# job.yml
resources:
  jobs:
    example_job:
      name: 'Example with multiple wheels'
      tasks:
        - task_key: task

          spark_python_task:
            python_file: ../src/call_wheel.py

          libraries:
            - whl: ../my_custom_wheel1/dist/*.whl
            - whl: ../my_custom_wheel2/dist/*.whl

          new_cluster:
            node_type_id: i3.xlarge
            num_workers: 0
            spark_version: 14.3.x-scala2.12
            spark_conf:
              'spark.databricks.cluster.profile': 'singleNode'
              'spark.master': 'local[*, 4]'
            custom_tags:
              'ResourceClass': 'SingleNode'
# databricks.yml
bundle:
  name: job_with_multiple_wheels

include:
  - ./resources/job.yml

workspace:
  host: https://myworkspace.cloud.databricks.com

artifacts:
  my_custom_wheel1:
    type: whl
    build: poetry build
    path: ./my_custom_wheel1

  my_custom_wheel2:
    type: whl
    build: poetry build
    path: ./my_custom_wheel2

targets:
  dev:
    default: true
    mode: development

Zadanie z parametrami

Poniższa przykładowa konfiguracja definiuje zadanie z parametrami. Aby uzyskać więcej informacji na temat parametryzacji zadań, zobacz Sparametryzowanie zadań.

resources:
  jobs:
    job_with_parameters:
      name: job_with_parameters

      tasks:
        - task_key: task_a
          spark_python_task:
            python_file: ../src/file.py
            parameters:
              - '--param1={{ job.parameters.param1 }}'
              - '--param2={{ job.parameters.param2 }}'

          new_cluster:
            node_type_id: i3.xlarge
            num_workers: 1
            spark_version: 14.3.x-scala2.12

      parameters:
        - name: param1
          default: value1
        - name: param2
          default: value1

Te parametry można ustawić w czasie wykonywania, przekazując parametry zadania do bundle run, na przykład:

databricks bundle run -- --param1=value2 --param2=value2

Zadanie korzystające z pliku requirements.txt

Poniższa przykładowa konfiguracja definiuje zadanie, które używa pliku requirements.txt.

resources:
  jobs:
    job_with_requirements_txt:
      name: 'Example job that uses a requirements.txt file'
      tasks:
        - task_key: task
          job_cluster_key: default
          spark_python_task:
            python_file: ../src/main.py
          libraries:
            - requirements: /Workspace/${workspace.file_path}/requirements.txt

Zadanie zgodnie z harmonogramem

W poniższych przykładach przedstawiono konfigurację zadań uruchamianych zgodnie z harmonogramem. Aby uzyskać informacje o harmonogramach i wyzwalaczach zadań, zobacz Automatyzowanie zadań za pomocą harmonogramów i wyzwalaczy.

Ta konfiguracja definiuje zadanie, które jest uruchamiane codziennie o określonej godzinie:

resources:
  jobs:
    my-notebook-job:
      name: my-notebook-job
      tasks:
        - task_key: my-notebook-task
          notebook_task:
            notebook_path: ./my-notebook.ipynb
      schedule:
        quartz_cron_expression: '0 0 8 * * ?' # daily at 8am
        timezone_id: UTC
        pause_status: UNPAUSED

W tej konfiguracji zadanie jest uruchamiane tydzień po ostatnim uruchomieniu zadania:

resources:
  jobs:
    my-notebook-job:
      name: my-notebook-job
      tasks:
        - task_key: my-notebook-task
          notebook_task:
            notebook_path: ./my-notebook.ipynb
      trigger:
        pause_status: UNPAUSED
        periodic:
          interval: 1
          unit: WEEKS

Konfiguracja rurociągu

Ta sekcja zawiera przykłady konfiguracji potoku. Aby uzyskać informacje o konfiguracji potoku, zobacz potok.

Potok korzystający z obliczeń bezserwerowych

Pakiety deklaratywne automatyzacji obsługują potoki uruchamiane w bezserwerowych obliczeniach. Aby to skonfigurować, ustaw parametr serverless potoku na wartość true. Poniższa przykładowa konfiguracja definiuje potok uruchamiany na bezserwerowych obliczeniach z zainstalowanymi zależnościami oraz zadanie wyzwalające odświeżanie potoku co godzinę.

# A pipeline that runs on serverless compute
resources:
  pipelines:
    my_pipeline:
      name: my_pipeline
      target: ${bundle.environment}
      serverless: true
      environment:
        dependencies:
          - 'dist/*.whl'
      catalog: users
      libraries:
        - notebook:
            path: ../src/my_pipeline.ipynb

      configuration:
        bundle.sourcePath: /Workspace/${workspace.file_path}/src
# This defines a job to refresh a pipeline that is triggered every hour
resources:
  jobs:
    my_job:
      name: my_job

      # Run this job once an hour.
      trigger:
        periodic:
          interval: 1
          unit: HOURS

      email_notifications:
        on_failure:
          - someone@example.com

      tasks:
        - task_key: refresh_pipeline
          pipeline_task:
            pipeline_id: ${resources.pipelines.my_pipeline.id}