Tutorial: Erstellen Ihrer ersten benutzerdefinierten Databricks Asset Bundle-Vorlage
In diesem Tutorial erstellen Sie eine benutzerdefinierte Databricks-Ressourcenpaketvorlage (Databricks Asset Bundle, DAB) zum Erstellen von Paketen, die einen Auftrag mit einer bestimmten Python-Aufgabe in einem Cluster mithilfe eines bestimmten Docker-Containerimages ausführen.
Vor der Installation
Installieren Sie die Databricks-CLI (Version 0.218.0 oder höher). Wenn Sie diese bereits installiert haben, stellen Sie sicher, dass es sich um Version 0.218.0 oder höher handelt, indem Sie databricks -version
über die Befehlszeile ausführen.
Definieren von Variablen für Benutzereingabeaufforderungen
Der erste Schritt beim Erstellen einer Paketvorlage besteht darin, die Variablen für die databricks bundle init
-Benutzereingabeaufforderung zu definieren. Über die Befehlszeile:
Erstellen Sie ein leeres Verzeichnis mit dem Namen
dab-container-template
:mkdir dab-container-template
Erstellen Sie im Stammverzeichnis eine Datei namens
databricks_template_schema.json
:cd dab-container-template touch databricks_template_schema.json
Fügen Sie
databricks_template_schema.json
den folgenden Inhalt hinzu, und speichern Sie die Datei. Jede Variable wird während der Paketerstellung in eine Benutzereingabeaufforderung übersetzt.{ "properties": { "project_name": { "type": "string", "default": "project_name", "description": "Project name", "order": 1 } } }
Erstellen der Paketordnerstruktur
Erstellen Sie als Nächstes im Vorlagenverzeichnis Unterverzeichnisse namens resources
und src
. Der template
-Ordner enthält die Verzeichnisstruktur für die generierten Bundles. Die Namen der Unterverzeichnisse und Dateien folgen der Syntax der Go-Paketvorlage, wenn sie von Benutzerwerten abgeleitet werden.
mkdir -p "template/resources"
mkdir -p "template/src"
Hinzufügen von YAML-Konfigurationsvorlagen
Erstellen Sie im template
-Verzeichnis eine Datei namens databricks.yml.tmpl
, und fügen Sie den folgenden YAML-Code hinzu:
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 -}}
Erstellen Sie eine weitere YAML-Datei namens {{.project_name}}_job.yml.tmpl
, und platzieren Sie sie im template/resources
-Verzeichnis. Diese neue YAML-Datei teilt die Projektauftragsdefinitionen aus der restlichen Definition des Pakets auf. Fügen Sie dieser Datei den folgenden YAML-Code hinzu, um den Vorlagenauftrag zu beschreiben, der eine bestimmte Python-Aufgabe enthält, die mit einem bestimmten Docker-Containerimage in einem Auftragscluster ausgeführt werden soll:
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 diesem Beispiel verwenden Sie ein standardmäßiges Docker-Basiscontainerimage, aber Sie können stattdessen auch Ihr eigenes benutzerdefiniertes Image angeben.
Hinzufügen von Dateien, auf die in Ihrer Konfiguration verwiesen wird
Erstellen Sie als Nächstes ein template/src/{{.project_name}}
-Verzeichnis, und erstellen Sie die Python-Aufgabendatei, auf die der Auftrag in der Vorlage verweist:
mkdir -p template/src/{{.project_name}}
touch template/src/{{.project_name}}/task.py
Fügen Sie nun Folgendes zu task.py
hinzu:
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.master('local[*]').appName('example').getOrCreate()
print(f'Spark version{spark.version}')
Überprüfen der Paketvorlagenstruktur
Überprüfen Sie die Ordnerstruktur des Paketvorlagenprojekts. Diese sollte wie folgt aussehen:
.
├── databricks_template_schema.json
└── template
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── {{.project_name}}
└── task.py
Testen der Vorlage
Testen Sie schließlich die Paketvorlage. Um ein Paket basierend auf Ihrer neuen benutzerdefinierten Vorlage zu generieren, verwenden Sie den databricks bundle init
-Befehl, und geben Sie den neuen Vorlagenspeicherort an. Verwenden Sie den Stammordner Ihres Paketprojekts wie folgt:
mkdir my-new-container-bundle
cd my-new-container-bundle
databricks bundle init dab-container-template
Nächste Schritte
- Erstellen Sie ein Bundle, das ein Notebook in einem Azure Databricks-Arbeitsbereich bereitstellt, und führen Sie dann das bereitgestellte Notebook als Azure Databricks-Auftrag aus. Weitere Informationen finden Sie unter Entwickeln eines Auftrags in Azure Databricks mithilfe von Databricks-Ressourcen-Bundles.
- Erstellen Sie ein Bundle, das ein Notebook in einem Azure Databricks-Arbeitsbereich bereitstellt und dann dieses bereitgestellte Notebook als Delta Live Tables-Pipeline ausführt. Weitere Informationen finden Sie unter Entwickeln von Delta Live Tables-Pipelines mit Databricks-Ressourcenbundles.
- Erstellen Sie ein Bundle, das einen MLOps Stapel bereitstellt und ausführt. Weitere Informationen finden Sie unter Databricks-Ressourcenpakete für MLOps-Stapel.
- Fügen Sie einem CI/CD-Workflow (Continuous Integration/Continuous Deployment) in GitHub ein Bundle hinzu. Weitere Informationen finden Sie unter Ausführen eines CI/CD-Workflows mit einem Databricks-Ressourcenpaket und GitHub Actions.