Zelfstudie: Uw eerste aangepaste Databricks Asset Bundle-sjabloon maken
In deze handleiding maakt u een aangepaste Databricks Asset Bundle-sjabloon voor het maken van bundels die een specifieke Python-taak uitvoeren op een cluster met een specifieke Docker-containerimage.
Zie Aangepaste bundelsjablonenvoor meer informatie over aangepaste bundelsjablonen.
Voordat u begint
Installeer de Databricks CLI versie 0.218.0 of hoger. Als u deze al hebt geïnstalleerd, controleert u of de versie 0.218.0 of hoger is door databricks -version
uit te voeren vanaf de opdrachtregel.
Gebruikerspromptvariabelen definiëren
De eerste stap bij het ontwikkelen van een bundelsjabloon is het definiëren van de databricks bundle init
gebruikerspromptvariabelen. Vanaf de opdrachtregel:
Maak een lege map met de naam
dab-container-template
:mkdir dab-container-template
Maak in de hoofdmap een bestand met de naam
databricks_template_schema.json
:cd dab-container-template touch databricks_template_schema.json
Voeg de volgende inhoud toe aan het
databricks_template_schema.json
en sla het bestand op. Elke variabele wordt vertaald naar een gebruikersprompt tijdens het maken van de bundel.{ "properties": { "project_name": { "type": "string", "default": "project_name", "description": "Project name", "order": 1 } } }
De structuur van de bundelmap maken
Maak vervolgens in de sjabloonmap submappen met de naam resources
en src
. De map template
bevat de mapstructuur voor de gegenereerde bundels. De namen van de submappen en bestanden volgen de syntaxis van de Go-pakketsjabloon wanneer ze zijn afgeleid van gebruikerswaarden.
mkdir -p "template/resources"
mkdir -p "template/src"
YAML-configuratiesjablonen toevoegen
Maak in de map template
een bestand met de naam databricks.yml.tmpl
en voeg de volgende YAML toe. In dit voorbeeld worden helpers voor bundelsjablonengebruikt.
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 DLT 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 -}}
Maak een ander YAML-bestand met de naam {{.project_name}}_job.yml.tmpl
en plaats het in de map template/resources
. Met dit nieuwe YAML-bestand worden de projecttaakdefinities gesplitst van de rest van de definitie van de bundel. Voeg de volgende YAML toe aan dit bestand om de template job te beschrijven, die een specifieke Python-taak bevat die moet worden uitgevoerd op een jobcluster met behulp van een specifieke Docker-containerimage.
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 dit voorbeeld gebruikt u een basis Docker-containerimage van Databricks, maar u kunt ook uw eigen aangepaste image opgeven.
Bestanden toevoegen waarnaar wordt verwezen in uw configuratie
Maak vervolgens een template/src/{{.project_name}}
map en maak het Python-taakbestand waarnaar wordt verwezen door de taak in de sjabloon:
mkdir -p template/src/{{.project_name}}
touch template/src/{{.project_name}}/task.py
Voeg nu het volgende toe aan task.py
:
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.master('local[*]').appName('example').getOrCreate()
print(f'Spark version{spark.version}')
De structuur van de bundelsjabloon controleren
Controleer de mapstructuur van uw bundelsjabloonproject. Dit moet er als volgt uitzien:
.
├── databricks_template_schema.json
└── template
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── {{.project_name}}
└── task.py
Uw sjabloon testen
Test ten slotte uw bundelsjabloon. Als u een bundel wilt genereren op basis van uw nieuwe aangepaste sjabloon, gebruikt u de opdracht databricks bundle init
en geeft u de nieuwe sjabloonlocatie op. Vanuit de hoofdmap van uw bundelprojecten:
mkdir my-new-container-bundle
cd my-new-container-bundle
databricks bundle init dab-container-template
Volgende stappen
- Maak een bundel waarmee een notebook wordt geïmplementeerd in een Azure Databricks-werkruimte en dat geïmplementeerde notebook vervolgens wordt uitgevoerd als een Azure Databricks-taak. Zie Een taak ontwikkelen in Azure Databricks met behulp van Databricks Asset Bundles.
- Maak een bundel waarmee een notebook wordt geïmplementeerd in een Azure Databricks-werkruimte en het geïmplementeerde notebook vervolgens wordt uitgevoerd als een DLT-pijplijn. Zie DLT-pijplijnen ontwikkelen met Databricks Asset Bundles.
- Maak een bundel waarmee een MLOps-stack wordt geïmplementeerd en uitgevoerd. Zie Databricks Assetbundels voor MLOps-stacks.
- Voeg een bundel toe aan een CI/CD-werkstroom (continue integratie/continue implementatie) in GitHub. Zie Een CI/CD-werkstroom uitvoeren met een Databricks Asset Bundle en GitHub Actions.
Middelen
- opslagplaats met bundelvoorbeelden in GitHub