Esercitazione: Creare il primo modello di bundle di asset di Databricks personalizzato
In questa esercitazione si creerà un modello di bundle di asset di Databricks personalizzato per la creazione di bundle che eseguono un processo con un'attività Python specifica in un cluster usando un'immagine del contenitore Docker specifica.
Prima di iniziare
Installare l'interfaccia della riga di comando di Databricks versione 0.218.0 o successiva. Se è già stato installato, verificare che la versione sia 0.218.0 o successiva eseguendo databricks -version
dalla riga di comando.
Definire le variabili di richiesta utente
Il primo passaggio per la compilazione di un modello di bundle consiste nel definire le variabili di richiesta dell'utente databricks bundle init
. Dalla riga di comando:
Creare una directory vuota denominata
dab-container-template
:mkdir dab-container-template
Creare un nuovo file nella directory denominato
databricks_template_schema.json
:cd dab-container-template touch databricks_template_schema.json
Aggiungere il contenuto seguente al
databricks_template_schema.json
e salvare il file. Ogni variabile verrà convertita in una richiesta dell'utente durante la creazione del bundle.{ "properties": { "project_name": { "type": "string", "default": "project_name", "description": "Project name", "order": 1 } } }
Creare la struttura di cartelle del bundle
Successivamente, nella directory del modello creare sottodirectory denominate resources
e src
. La cartella template
contiene la struttura di directory per i bundle generati. I nomi delle sottodirectory e dei file seguiranno la sintassi del modello di pacchetto Go quando deriva dai valori utente.
mkdir -p "template/resources"
mkdir -p "template/src"
Aggiungere modelli di configurazione YAML
Nella directory template
, creare un file denominato databricks.yml.tmpl
e aggiungere il seguente 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 -}}
Creare un altro file YAML denominato {{.project_name}}_job.yml.tmpl
e inserirlo nella directory template/resources
. Questo nuovo file YAML suddivide le definizioni del processo di progetto dal resto della definizione del bundle. Aggiungere il codice YAML seguente a questo file per descrivere il processo modello, che contiene un'attività Python specifica da eseguire in un cluster di processo usando un'immagine del contenitore Docker specifica:
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
In questo esempio si usa un'immagine del contenitore Docker di base di Databricks predefinita, ma è possibile specificare invece un'immagine personalizzata.
Aggiungere file a cui si fa riferimento nella configurazione
Creare quindi una directory template/src/{{.project_name}}
e creare il file di attività Python a cui fa riferimento il processo nel modello:
mkdir -p template/src/{{.project_name}}
touch template/src/{{.project_name}}/task.py
Aggiungere quanto segue a task.py
:
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.master('local[*]').appName('example').getOrCreate()
print(f'Spark version{spark.version}')
Verificare la struttura del modello di bundle
Esaminare la struttura di cartelle del progetto modello di bundle. La cartella dovrebbe avere un aspetto simile a questo:
.
├── databricks_template_schema.json
└── template
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── {{.project_name}}
└── task.py
Testare il modello
Infine, testare il modello di bundle. Per generare un bundle basato sul nuovo modello personalizzato, usare il comando databricks bundle init
specificando il nuovo percorso del modello. Dalla cartella radice dei progetti bundle:
mkdir my-new-container-bundle
cd my-new-container-bundle
databricks bundle init dab-container-template
Passaggi successivi
- Creare un bundle che distribuisce un notebook in un'area di lavoro di Azure Databricks e quindi esegue il notebook distribuito come processo di Azure Databricks. Vedere Sviluppare un processo in Azure Databricks usando i bundle di asset di Databricks.
- Creare un bundle che distribuisce un notebook in un'area di lavoro di Azure Databricks e quindi esegue il notebook distribuito come pipeline di tabelle Live Delta. Consultare Sviluppare pipeline di tabelle Live Delta con i Databricks Asset Bundle.
- Creare un bundle che distribuisce ed esegue uno stack MLOps. Consultare Databricks Asset Bundle per stack MLOps.
- Aggiungere un bundle a un flusso di lavoro CI/CD (integrazione continua/distribuzione continua) in GitHub. Vedere Eseguire un flusso di lavoro CI/CD con un bundle di asset databricks e GitHub Actions.