이 문서에서는 Databricks 자산 번들 기능 및 일반적인 번들 사용 사례에 대한 예제 구성을 제공합니다.
다음 표에 설명된 전체 번들 예제는 번들 예제 GitHub 리포지토리에서 사용할 수 있습니다.
| 번들 이름 | 설명 |
|---|---|
| app_with_database | OLTP Postgres 데이터베이스에서 백업하는 Databricks 앱이 있는 번들 |
| dashboard_nyc_taxi | AI/BI 대시보드가 있는 번들 및 대시보드의 스냅샷을 캡처하고 구독자에게 전자 메일을 전송하는 작업 |
| database_with_catalog | OLTP 데이터베이스 인스턴스 및 데이터베이스 카탈로그를 정의하는 번들 |
| databricks_app | Databricks 앱을 정의하는 번들 |
| 개발_클러스터 | 개발(다목적) 클러스터를 정의하고 사용하는 번들 |
| job_read_secret (작업_읽기_비밀) | 비밀 범위를 정의하는 번들 및 해당 범위에서 읽는 작업이 있는 작업 |
| 작업_여러_바퀴 | 여러 휠 종속성이 있는 작업을 정의하고 사용하는 번들 |
| job_with_run_job_tasks | 실행 작업 태스크가 있는 여러 작업이 있는 번들 |
| job_with_sql_notebook | SQL Notebook 작업을 사용하는 작업이 있는 번들 |
| 스키마가 포함된 파이프라인 | Unity 카탈로그 스키마 및 이를 사용하는 파이프라인을 정의하는 번들 |
| private_wheel_packages | 작업 프로세스에서 프라이빗 휠 패키지를 사용하는 번들 |
| python_wheel_poetry | 시를 사용하여 빌드하는 whl 번들 |
| 서버리스 작업 | 서버리스 컴퓨팅을 사용하여 작업을 실행하는 번들 |
| 번들 간 파일 공유 | 번들 루트 디렉터리 외부에 있는 파일이 포함된 번들입니다. |
| spark_jar_task | Spark JAR 작업을 정의하고 사용하는 번들 |
| 작업에서 볼륨으로 쓰기 | Unity 카탈로그 볼륨에 파일을 쓰는 번들 |
번들 시나리오
이 섹션에는 최상위 번들 매핑을 사용하는 방법을 보여 주는 구성 예제가 포함되어 있습니다. 구성 참조를 참조하세요.
JAR 파일을 Unity 카탈로그에 업로드하는 번들
JAR 파일 및 휠 파일과 같은 모든 아티팩트가 Unity 카탈로그 볼륨에 업로드되도록 Unity 카탈로그 볼륨을 아티팩트 경로로 지정할 수 있습니다. 다음 예제 번들은 JAR 파일을 빌드하고 Unity 카탈로그에 업로드합니다. 매핑에 대한 artifact_path 자세한 내용은 artifact_path 참조하세요.
artifacts대한 자세한 내용은 아티팩트참조하세요.
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
작업 구성
이 섹션에는 작업 구성 예제가 포함되어 있습니다. 작업 구성 세부 정보는 작업을 참조하십시오.
서버리스 컴퓨팅을 사용하는 작업
Databricks 자산 번들은 서버리스 컴퓨팅에서 실행되는 작업을 지원합니다.
워크플로에 대한 서버리스 컴퓨팅을 사용하여 Lakeflow 작업 실행을 참조하세요. 이를 구성하려면 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:
environment_version: '2'
dependencies:
- my-library
여러 휠 파일이 있는 작업
다음 예제 구성들은 여러 *.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
매개 변수가 있는 작업
다음 예제 구성은 매개 변수를 사용하여 작업을 정의합니다. 작업 매개 변수화에 대한 자세한 내용은 매개 변수화 작업을 참조하세요.
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
이러한 매개 변수는 다음과 같이 작업 매개 변수 를 bundle run전달하여 런타임에 설정할 수 있습니다.
databricks bundle run -- --param1=value2 --param2=value2
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
파이프라인 구성
이 섹션에는 파이프라인 구성 예제가 포함되어 있습니다. 파이프라인 구성 정보는 파이프라인을 참조하세요.
서버리스 컴퓨팅을 사용하는 파이프라인
Databricks 자산 번들은 서버리스 컴퓨팅에서 실행되는 파이프라인을 지원합니다. 이를 구성하려면 파이프라인 serverless 설정을 true.로 설정합니다. 다음 예제 구성은 종속성이 설치된 서버리스 컴퓨팅에서 실행되는 파이프라인과 매시간 파이프라인의 새로 고침을 트리거하는 작업을 정의합니다.
# 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}