Självstudie: Skapa din första anpassade Databricks-mall för tillgångspaket
I den här självstudien skapar du en anpassad Databricks Asset Bundle-mall för att skapa paket som kör ett jobb med en specifik Python-uppgift i ett kluster med en specifik Docker-containeravbildning.
Innan du börjar
Installera Databricks CLI version 0.218.0 eller senare. Om du redan har installerat den kontrollerar du att versionen är 0.218.0 eller senare genom att köra databricks -version
från kommandoraden.
Definiera variabler för användarprompt
Det första steget i att skapa en paketmall är att definiera variablerna för databricks bundle init
användarprompten. Från kommandoraden:
Skapa en tom katalog med namnet
dab-container-template
:mkdir dab-container-template
I katalogens rot skapar du en fil med namnet
databricks_template_schema.json
:cd dab-container-template touch databricks_template_schema.json
Lägg till följande innehåll i
databricks_template_schema.json
och spara filen. Varje variabel översätts till en användarprompt när paketet skapas.{ "properties": { "project_name": { "type": "string", "default": "project_name", "description": "Project name", "order": 1 } } }
Skapa paketmappstrukturen
I mallkatalogen skapar du sedan underkataloger med namnet resources
och src
. Mappen template
innehåller katalogstrukturen för dina genererade paket. Namnen på underkatalogerna och filerna följer Go-paketmallssyntaxen när de härleds från användaren values.
mkdir -p "template/resources"
mkdir -p "template/src"
Lägga till YAML-konfigurationsmallar
I katalogen template
skapar du en fil med namnet databricks.yml.tmpl
och lägger till följande YAML:
touch template/databricks.yml.tmpl
# This is a Databricks asset bundle definition for {{.project_name}}.
# See https://docs.databricks.com/dev-tools/bundles/index.html for documentation.
bundle:
name: {{.project_name}}
include:
- resources/*.yml
targets:
# The 'dev' target, used for development purposes.
# Whenever a developer deploys using 'dev', they get their own copy.
dev:
# We use 'mode: development' to make sure everything deployed to this target gets a prefix
# like '[dev my_user_name]'. Setting this mode also disables any schedules and
# automatic triggers for jobs and enables the 'development' mode for Delta Live Tables pipelines.
mode: development
default: true
workspace:
host: {{workspace_host}}
# The 'prod' target, used for production deployment.
prod:
# For production deployments, we only have a single copy, so we override the
# workspace.root_path default of
# /Workspace/Users/${workspace.current_user.userName}/.bundle/${bundle.target}/${bundle.name}
# to a path that is not specific to the current user.
#
# By making use of 'mode: production' we enable strict checks
# to make sure we have correctly configured this target.
mode: production
workspace:
host: {{workspace_host}}
root_path: /Shared/.bundle/prod/${bundle.name}
{{- if not is_service_principal}}
run_as:
# This runs as {{user_name}} in production. Alternatively,
# a service principal could be used here using service_principal_name
# (see Databricks documentation).
user_name: {{user_name}}
{{end -}}
Skapa en annan YAML-fil med namnet {{.project_name}}_job.yml.tmpl
och placera den template/resources
i katalogen. Den här nya YAML-filen delar upp projektjobbsdefinitionerna från resten av paketets definition. Lägg till följande YAML i den här filen för att beskriva malljobbet, som innehåller en specifik Python-uppgift som ska köras på ett jobbkluster med en specifik Docker-containeravbildning:
touch template/resources/{{.project_name}}_job.yml.tmpl
# The main job for {{.project_name}}
resources:
jobs:
{{.project_name}}_job:
name: {{.project_name}}_job
tasks:
- task_key: python_task
job_cluster_key: job_cluster
spark_python_task:
python_file: ../src/{{.project_name}}/task.py
job_clusters:
- job_cluster_key: job_cluster
new_cluster:
docker_image:
url: databricksruntime/python:10.4-LTS
node_type_id: i3.xlarge
spark_version: 13.3.x-scala2.12
I det här exemplet använder du en standard dockercontaineravbildning för Databricks-bas, men du kan ange en egen anpassad avbildning i stället.
Lägg till filer som refereras i konfigurationen
Skapa sedan en template/src/{{.project_name}}
katalog och skapa python-aktivitetsfilen som refereras av jobbet i mallen:
mkdir -p template/src/{{.project_name}}
touch template/src/{{.project_name}}/task.py
Lägg nu till följande i task.py
:
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.master('local[*]').appName('example').getOrCreate()
print(f'Spark version{spark.version}')
Verifiera mallstrukturen för paket
Granska mappstrukturen för ditt paketmallsprojekt. Den bör se ut så här:
.
├── databricks_template_schema.json
└── template
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── {{.project_name}}
└── task.py
Testa mallen
Testa slutligen paketmallen. Om du vill generate ett paket baserat på din nya anpassade mall använder du kommandot databricks bundle init
och anger den nya mallplatsen. Från rotmappen för paketprojekt:
mkdir my-new-container-bundle
cd my-new-container-bundle
databricks bundle init dab-container-template
Nästa steg
- Skapa ett paket som distribuerar en notebook-fil till en Azure Databricks-arbetsyta och kör sedan den distribuerade notebook-filen som ett Azure Databricks-jobb. Se Utveckla ett jobb på Azure Databricks med databricks-tillgångspaket.
- Skapa ett paket som distribuerar en notebook-fil till en Azure Databricks-arbetsyta och kör sedan den distribuerade notebook-filen som en Delta Live-Tables pipeline. Se Utveckla Delta Live Tables-pipelines med Databricks-tillgångspaket.
- Skapa ett paket som distribuerar och kör en MLOps Stack. Se Databricks-tillgångspaket för MLOps Stacks.
- Lägg till ett paket i ett CI/CD-arbetsflöde (kontinuerlig integrering/kontinuerlig distribution) i GitHub. Se Köra ett CI/CD-arbetsflöde med ett Databricks-tillgångspaket och GitHub Actions.