Projectsjablonen voor Databricks Asset Bundle
Databricks Asset Bundles beschrijft Databricks-resources, zoals taken, pijplijnen en notebooks als bronbestanden, zodat u metagegevens naast deze bronbestanden kunt opnemen om infrastructuur en andere resources in te richten en een end-to-end definitie van een project te bieden, allemaal verpakt als één implementeerbaar project. Bekijk wat zijn Databricks Asset Bundles?.
Met bundelsjablonen kunnen gebruikers bundels op een consistente, herhaalbare manier maken door mapstructuren tot stand te brengen, stappen en taken, tests en andere IaC-kenmerken (Infrastructure-as-Code) van DevOps te maken die gebruikelijk zijn in een implementatiepijplijn.
Als u bijvoorbeeld regelmatig Databricks-taken uitvoert waarvoor aangepaste pakketten nodig zijn met een tijdrovende compilatiestap bij de installatie, kunt u uw ontwikkelingslus versnellen door een bundelsjabloon te maken waarmee een aangepaste containeromgeving wordt opgegeven.
Databricks biedt een set standaardbundelsjablonen, maar u kunt ook aangepaste bundelsjablonenmaken. Gebruikers kunnen vervolgens bundels initialiseren met behulp van de init-opdracht, waarbij een standaardsjabloon of uw aangepaste sjabloon wordt opgegeven.
Een bundel maken met behulp van een sjabloon
Als u een Azure Databricks-bundelsjabloon wilt gebruiken om uw bundel te maken, gebruikt u de opdracht Databricks CLIbundle init
, waarbij u de naam van de sjabloon opgeeft die u wilt gebruiken. Met de volgende opdracht maakt u bijvoorbeeld een bundel met behulp van de standaard-Python-bundelsjabloon:
databricks bundle init default-python
Als u een aangepaste bundelsjabloon wilt gebruiken, geeft u het lokale pad of de externe URL van de sjabloon door aan de opdracht Databricks CLIbundle init
.
Met het volgende commando wordt bijvoorbeeld de dab-container-template
sjabloon gebruikt die is gemaakt in de Zelfstudie: Aangepaste Bundelsjabloon:
databricks bundle init /projects/my-custom-bundle-templates/dab-container-template
Als u geen sjabloon opgeeft, geeft het bundle init
-commando een prompt met de beschikbare standaardsjablonen waaruit u kunt kiezen.
Standaardbundelsjablonen
Azure Databricks biedt de volgende standaardbundelsjablonen:
Sjabloon | Beschrijving |
---|---|
default-python |
Een sjabloon voor het gebruik van Python met Databricks. Met deze sjabloon maakt u een bundel met een taak en DLT-pijplijn. Zie default-python. |
default-sql |
Een sjabloon voor het gebruik van SQL met Databricks. Deze sjabloon bevat een configuratiebestand dat een taak definieert waarmee SQL-query's worden uitgevoerd in een SQL Warehouse. Zie default-sql. |
dbt-sql |
Een sjabloon die gebruikmaakt van dbt-core voor lokale ontwikkeling en bundels voor implementatie. Deze sjabloon bevat de configuratie waarmee een taak met een dbt-taak wordt gedefinieerd, evenals een configuratiebestand dat dbt-profielen definieert voor geïmplementeerde dbt-taken. Zie dbt-sql. |
mlops-stacks |
Een geavanceerde volledige stacksjabloon voor het starten van nieuwe MLOps Stacks-projecten. Zie mlops-stacks en Databricks Asset Bundles voor MLOps Stacks. |
Aangepaste bundelsjablonen
Bundelsjablonen maken gebruik van go-pakket templatingssyntaxis, die flexibiliteit bieden voor de aangepaste bundelsjablonen die u kunt maken. Zie de Go-pakket sjabloondocumentatie.
sjabloonprojectstructuur
Een bundelsjabloonproject moet minimaal het volgende hebben:
- Een
databricks_template_schema.json
-bestand in de hoofdmap van het project dat één gebruikersprompt-eigenschap definieert voor de naam van de projectbundel. Zie sjabloonschema. - Een
databricks.yml.tmpl
bestand in eentemplate
map die de configuratie definieert voor alle bundels die met de sjabloon zijn gemaakt. Als uwdatabricks.yml.tmpl
bestand verwijst naar aanvullende*.yml.tmpl
configuratiesjablonen, geeft u de locatie van deze sjablonen op in deinclude
toewijzing. Zie Configuratiesjablonen.
Daarnaast worden de mapstructuur en opgenomen bestanden van het bundelsjabloonproject template
map gespiegeld door bundels die met de sjabloon zijn gemaakt. Als u bijvoorbeeld wilt dat de sjabloon een bundel genereert met een eenvoudig notitieblok in de map src
en een taakdefinitie waarmee het notebook wordt uitgevoerd in de map resources
, zou u het sjabloonproject als volgt organiseren:
basic-bundle-template
├── databricks_template_schema.json
└── template
└── {{.project_name}}
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── simple_notebook.ipynb
Tip
De projectmapnaam en de naam van het taakdefinitiebestand in deze bundelsjabloon gebruiken een sjabloonvariabele. Zie Sjabloonhelpers en -variabelenvoor meer informatie over sjabloonhelpers en variabelen.
sjabloonschema
Een aangepast bundelsjabloonproject moet een databricks_template_schema.json
JSON-bestand in de hoofdmap van het project bevatten. Dit bestand definieert velden die worden gebruikt door de Databricks CLI wanneer de opdracht bundle init
wordt uitgevoerd, zoals prompttekst.
Het volgende basisbestand databricks_template_schema.json
definieert een invoervariabele project_name
voor het bundelproject, dat het promptbericht en een standaardwaarde bevat. Vervolgens wordt een succesbericht gedefinieerd voor de initialisatie van het bunde-project die gebruikmaakt van de waarde van de invoervariabele in het bericht.
{
"properties": {
"project_name": {
"type": "string",
"default": "basic_bundle",
"description": "What is the name of the bundle you want to create?",
"order": 1
}
},
"success_message": "\nYour bundle '{{.project_name}}' has been created."
}
Sjabloonschemavelden
Het databricks_template_schema.json
-bestand ondersteunt het definiëren van invoervariabelen voor het verzamelen van informatie tijdens de bundelinitialisatie van uw gebruiker in het properties
veld, evenals aanvullende velden om de initialisatie aan te passen.
Invoervariabelen worden gedefinieerd in het properties
veld van het sjabloonschema. Elke invoervariabele definieert metagegevens die nodig zijn voor het presenteren van een prompt aan de gebruiker tijdens bundelinitalisatie. De waarde van de variabele is vervolgens toegankelijk met behulp van de syntaxis van de sjabloonvariabele, zoals {{.project_name}}
.
U kunt ook de waarden van sommige velden instellen om het initialisatieproces van de bundel aan te passen.
Ondersteunde schemavelden worden vermeld in de volgende tabel.
Schemaveld | Beschrijving |
---|---|
properties |
De definities van de invoervariabelen voor het bundelsjabloon. Databricks raadt aan ten minste één invoervariabele te definiëren die de naam van het bundelproject is. |
properties.<variable_name> |
De naam van de invoervariabele. |
properties.<variable_name>.default |
Een standaardwaarde die moet worden gebruikt als een waarde niet wordt opgegeven door de gebruiker met --config-file als onderdeel van de opdracht bundle init of op de opdrachtregel wanneer er om wordt gevraagd. |
properties.<variable_name>.description |
Het gebruikerspromptbericht dat is gekoppeld aan de invoervariabele. |
properties.<variable_name>.enum |
Een lijst met mogelijke waarden voor de eigenschap, zoals "enum": ["azure", "aws", "gcp"] . Als dit veld is gedefinieerd, geeft de Databricks CLI de waarden weer in een lijst op de opdrachtregel om de gebruiker te vragen een waarde te selecteren. |
properties.<variable_name>.order |
Een geheel getal dat de relatieve volgorde voor de invoereigenschappen definieert. Hiermee bepaalt u de volgorde waarin de prompts voor deze invoervariabelen worden weergegeven op de opdrachtregel. |
properties.<variable_name>.pattern |
Het regexp-patroon dat moet worden gebruikt om de gebruikersinvoer te valideren, bijvoorbeeld "pattern": "^[^ .\\\\/]{3,}$" . Zie https://github.com/google/re2/wiki/Syntaxvoor ondersteunde regexp-syntaxis. |
properties.<variable_name>.pattern_match_failure_message |
Het bericht dat aan de gebruiker wordt weergegeven als de waarde die door de gebruiker is ingevoerd, niet overeenkomt met het opgegeven patroon, bijvoorbeeld Project name must be at least 3 characters long and cannot contain the following characters: \"\\\", \"/\", \" \" and \".\"." . |
properties.<variable_name>.skip_prompt_if |
Sla het vragen om de invoervariabele over als aan dit schema wordt voldaan door de configuratie die al aanwezig is. In dat geval wordt de standaardwaarde van de eigenschap gebruikt. Zie de sjabloon mlops-stacksvoor een voorbeeld. Alleen const vergelijkingen worden ondersteund. |
properties.<variable_name>.skip_prompt_if.properties.<previous_variable_name>.const |
Als de waarde voor <previous_variable_name> overeenkomt met de constante die is geconfigureerd in skip_prompt_if , wordt de prompt voor <variable_name> overgeslagen. |
welcome_message |
Het eerste bericht dat moet worden uitgevoerd voordat de gebruiker om invoer wordt gevraagd. |
success_message |
Het bericht dat moet worden afgedrukt nadat de sjabloon is geïnitialiseerd. |
min_databricks_cli_version |
De minimale semver-versie van deze Databricks CLI die voor de sjabloon is vereist.
databricks bundle init mislukt als de CLI-versie kleiner is dan deze versie. |
version |
Gereserveerd voor toekomstig gebruik. De versie van het schema. Dit wordt gebruikt om te bepalen of het schema compatibel is met de huidige CLI-versie. |
configuratiesjablonen voor
Een aangepaste bundelsjabloon moet een databricks.yml.tmpl
-bestand bevatten in een template
map in het bundelsjabloonproject dat wordt gebruikt voor het maken van het bundelproject databricks.yml
configuratiebestand. Sjablonen voor configuratiebestanden voor resources kunnen worden gemaakt in de map resources
. Vul deze sjabloonbestanden in met YAML voor configuratiesjablonen.
De volgende eenvoudige voorbeeldconfiguratiesjablonen voor databricks.yml en de bijbehorende *_job.yml de naam van de bundel en twee doelomgevingen vaststellen en een taak definiëren waarmee het notebook in de bundel wordt uitgevoerd, voor bundels die met deze sjabloon zijn gemaakt. Deze configuratiesjablonen maken gebruik van bundelvervangingen en bundeltemplatehelpers.
template/{{.project_name}}/databricks.yml.tmpl
:
# databricks.yml
# This is the configuration for the Databricks Asset Bundle {{.project_name}}.
bundle:
name: {{.project_name}}
include:
- resources/*.yml
targets:
# The deployment targets. See https://docs.databricks.com/en/dev-tools/bundles/deployment-modes.html
dev:
mode: development
default: true
workspace:
host: {{workspace_host}}
prod:
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
user_name: {{user_name}}
{{end -}}
template/{{.project_name}}/resources/{{.project_name}}_job.yml.tmpl
:
# {{.project_name}}_job.yml
# The main job for {{.project_name}}
resources:
jobs:
{{.project_name}}_job:
name: {{.project_name}}_job
tasks:
- task_key: notebook_task
job_cluster_key: job_cluster
notebook_task:
notebook_path: ../src/simple_notebook.ipynb
job_clusters:
- job_cluster_key: job_cluster
new_cluster:
node_type_id: i3.xlarge
spark_version: 13.3.x-scala2.12
Sjabloonhelpers en -variabelen
Sjabloonhelpers zijn functies van Databricks die u in uw sjabloonbestanden kunt gebruiken om tijdens runtime gebruikersspecifieke informatie op te halen of om te communiceren met de sjabloonengine. U kunt ook uw eigen sjabloonvariabelen definiëren.
De volgende sjabloonhelpers zijn beschikbaar voor Databricks-bundelsjabloonprojecten. Zie Go-sjablonenvoor meer informatie over het gebruik van Go-sjablonen en -variabelen.
Hulp | Beschrijving |
---|---|
{{url}} |
Een alias voor https://pkg.go.dev/net/url#Parse. Dit maakt het gebruik van alle methoden van url.URL mogelijk. |
{{regexp}} |
Een alias voor https://pkg.go.dev/regexp#Compile. Dit maakt het gebruik van alle methoden van regexp.Regexp mogelijk. |
{{random_int}} |
Retourneert, als een int, een niet-negatief pseudo-willekeurig getal in het halfopen interval (0,n). |
{{uuid}} |
Retourneert, als tekenreeks, een UUID die een 128-bits (16 byte) Universal Unique IDentifier is zoals gedefinieerd in RFC 4122. Deze id is stabiel voor de duur van de uitvoering van de sjabloon en kan worden gebruikt om het bundle.uuid veld in databricks.yml te vullen door sjabloonauteurs. |
{{bundle_uuid}} |
Een unieke id voor de bundel. Meerdere aanroepen van deze functie retourneren dezelfde UUID. |
{{pair}} |
Een sleutelwaardepaar. Dit wordt gebruikt met de map helper voor het genereren van kaarten voor gebruik in een sjabloon. |
{{map}} |
Converteert een lijst met paren naar een kaartobject. Dit is handig om meerdere objecten door te geven aan sjablonen die zijn gedefinieerd in de bibliotheekmap. Omdat go-tekstsjabloonsyntaxis voor het aanroepen van een sjabloon slechts één argument toestaat, kan deze functie worden gebruikt om deze beperking te omzeilen. In de volgende regel kunnen bijvoorbeeld {{template "my_template" (map (pair "foo" $arg1) (pair "bar" $arg2))}} , $arg1 en $arg2 vanuit my_template worden aangeduid als .foo en .bar . |
{{smallest_node_type}} |
Retourneert het kleinste knooppunttype. |
{{path_separator}} |
Het padscheidingsteken voor het besturingssysteem. Dit is / voor Unix-systemen en \ voor Windows. |
{{workspace_host}} |
De host-URL van de werkruimte waarop de gebruiker momenteel is geverifieerd. |
{{user_name}} |
De volledige naam van de gebruiker die de sjabloon initialiseert. |
{{short_name}} |
De korte naam van de gebruiker die de sjabloon initialiseert. |
{{default_catalog}} |
Retourneert de standaardwerkruimtecatalogus. Als er geen standaardwaarde is of als Unity Catalog niet is ingeschakeld, wordt er een lege tekenreeks geretourneerd. |
{{is_service_principal}} |
Of de huidige gebruiker al dan niet een service-principal is. |
{{ skip <glob-pattern-relative-to-current-directory> }} |
Zorgt ervoor dat de sjabloonengine alle bestanden en mappen overslaat die overeenkomen met het globpatroon van de invoer. Zie de sjabloon mlops-stacksvoor een voorbeeld. |
Helpers voor aangepaste sjablonen
Als u uw eigen sjabloonhulpfuncties wilt definiëren, maakt u een sjabloonbestand in de map library
van het sjabloonproject en gebruikt u de sjabloonsyntaxis go om helpers te definiëren. De volgende inhoud van een library/variables.tmpl
-bestand definieert bijvoorbeeld de variabelen cli_version
en model_name
. Wanneer deze sjabloon wordt gebruikt om een bundel te initialiseren, wordt de waarde van de model_name
-variabele samengesteld met behulp van het input_project_name
veld dat is gedefinieerd in het sjabloonschemabestand. De waarde van deze veldwaarde is de gebruikersinvoer na een prompt.
{{ define `cli_version` -}}
v0.240.0
{{- end }}
{{ define `model_name` -}}
{{ .input_project_name }}-model
{{- end }}
Zie het bestand mlops-stacks-sjabloonvariabelenvoor een volledig voorbeeld.
De bundelsjabloon testen
Ten slotte moet u de sjabloon testen. Gebruik bijvoorbeeld de Databricks CLI om een nieuwe bundel te initialiseren met behulp van de sjabloon die in de vorige secties is gedefinieerd:
databricks bundle init basic-bundle-template
Voor de prompt What is your bundle project name?
typt u my_test_bundle
.
Zodra de testbundel is gemaakt, wordt het succesbericht van het schemabestand uitgevoerd. Als u de inhoud van de my_test_bundle
map bekijkt, ziet u het volgende:
my_test_bundle
├── databricks.yml
├── resources
│ └── my_test_bundle_job.yml
└── src
└── simple_notebook.ipynb
En het databricks.yml
-bestand en de taak is nu aangepast:
# databricks.yml
# This is the configuration for the Databricks Asset Bundle my-test-bundle.
bundle:
name: my_test_bundle
include:
- resources/*.yml
targets:
# The 'dev' target, used for development purposes. See [_](https://docs.databricks.com/en/dev-tools/bundles/deployment-modes.html#development-mode)
dev:
mode: development
default: true
workspace:
host: https://my-host.cloud.databricks.com
# The 'prod' target, used for production deployment. See [_](https://docs.databricks.com/en/dev-tools/bundles/deployment-modes.html#production-mode)
prod:
mode: production
workspace:
host: https://my-host.cloud.databricks.com
root_path: /Shared/.bundle/prod/${bundle.name}
run_as:
# This runs as someone@example.com in production. Alternatively,
# a service principal could be used here using service_principal_name
user_name: someone@example.com
# my_test_bundle_job.yml
# The main job for my_test_bundle
resources:
jobs:
my_test_bundle_job:
name: my_test_bundle_job
tasks:
- task_key: notebook_task
job_cluster_key: job_cluster
notebook_task:
notebook_path: ../src/simple_notebook.ipynb
job_clusters:
- job_cluster_key: job_cluster
new_cluster:
node_type_id: i3.xlarge
spark_version: 13.3.x-scala2.12
De sjabloon delen
Als u deze bundelsjabloon met anderen wilt delen, kunt u deze opslaan in versiebeheer met elke provider die door Git wordt ondersteund en waartoe uw gebruikers toegang hebben. Als u de bundle init
opdracht wilt uitvoeren met een Git-URL, moet u ervoor zorgen dat het databricks_template_schema.json
bestand zich op de hoofdlocatie bevindt ten opzichte van die Git-URL.
Tip
U kunt het databricks_template_schema.json
bestand in een andere map plaatsen ten opzichte van de hoofdmap van de bundel. Vervolgens kunt u de optie van bundle init
de --template-dir
opdracht gebruiken om te verwijzen naar die map, die het databricks_template_schema.json
bestand bevat.
Volgende stappen
- Blader door extra sjablonen die door Databricks worden gemaakt en onderhouden. Bekijk de opslagplaats met bundelvoorbeelden in GitHub.
- Als u MLOps Stacks wilt gebruiken met Databricks Asset Bundle-sjablonen, raadpleegt u Databricks Asset Bundles voor MLOps Stacks.
- Meer informatie over het gebruik van templates in Go-pakketten. Zie de documentatie van het Go-pakketsjabloon.