다음을 통해 공유


번들 구성 예제

이 문서에서는 Databricks 자산 번들 기능 및 일반적인 번들 사용 사례에 대한 예제 구성을 제공합니다.

이 문서의 일부 예제들은 물론, 또 다른 예제들은 번들 예제 GitHub 리포지토리에서 찾을 수 있다는 점을 확인할 수 있습니다.

서버리스 컴퓨팅을 사용하는 작업

Databricks 자산 번들은 서버리스 컴퓨팅에서 실행되는 작업을 지원합니다. 이를 구성하려면 Notebook 작업이 있는 작업에 대한 clusters 설정을 생략하거나 아래 예제와 같이 환경을 지정할 수 있습니다. Python 스크립트, Python 휠 및 dbt 작업의 경우 서버리스 컴퓨팅에 environment_key 필요합니다. 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:
            client: "1"
            dependencies:
              - my-library

서버리스 컴퓨팅을 사용하는 파이프라인

Databricks 자산 번들은 서버리스 컴퓨팅에서 실행되는 파이프라인을 지원합니다. 이를 구성하려면 파이프라인 serverless 설정을 true.로 설정합니다. 다음 예제 구성은 서버리스 컴퓨팅에서 실행되는 파이프라인과 매시간 파이프라인의 새로 고침을 트리거하는 작업을 정의합니다.

# A pipeline that runs on serverless compute
resources:
  pipelines:
    my_pipeline:
      name: my_pipeline
      target: ${bundle.environment}
      serverless: true
      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}

SQL Notebook을 사용하여 작업

다음 예제 구성은 SQL Notebook을 사용하여 작업을 정의합니다.

resources:
  jobs:
    job_with_sql_notebook:
      name: "Job to demonstrate using a SQL notebook with a SQL warehouse"
      tasks:
        - task_key: notebook
          notebook_task:
            notebook_path: ./select.sql
            warehouse_id: 799f096837fzzzz4

여러 휠 파일이 있는 작업

다음 예제 구성은 여러 *.whl 파일이 있는 작업이 포함된 번들을 정의합니다.

# 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

requirements.txt 파일을 사용하는 작업

다음 예제 구성은 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

일정에 따라 작업

다음 예제에서는 일정에 따라 실행되는 작업에 대한 구성을 보여 줍니다. 작업 일정 및 트리거에 대한 자세한 내용은 일정 및 트리거를 사용하여 작업 자동화를 참조하세요.

이 구성은 지정된 시간에 매일 실행되는 작업을 정의합니다.

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

이 구성에서 작업은 작업이 마지막으로 실행된 후 일주일 후에 실행됩니다.

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

UNITY 카탈로그에 JAR 파일을 업로드하는 번들

JAR 파일 및 휠 파일과 같은 모든 아티팩트가 Unity 카탈로그 볼륨에 업로드되도록 Unity 카탈로그 볼륨을 아티팩트 경로로 지정할 수 있습니다. 다음 예제 번들은 JAR 파일을 Unity 카탈로그에 업로드합니다. 매핑에 대한 artifact_path 자세한 내용은 artifact_path 참조하세요.

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