Databricks Asset Bundle-projektmallar
Databricks-tillgångspaket beskriver Databricks-resurser som jobb, pipelines och notebook-filer som källfiler, låter dig inkludera metadata tillsammans med dessa källfiler för att etablera infrastruktur och andra resurser och tillhandahålla en definition från slutpunkt till slutpunkt för ett projekt, allt paketerat som ett enda distributionsbart projekt. Se Vad är Databricks-tillgångspaket?.
Med paketmallar kan användare skapa paket på ett konsekvent och repeterbart sätt genom att upprätta mappstrukturer, skapa steg och uppgifter, tester och andra DevOps IaC-attribut (infrastruktur som kod) som är gemensamma för en distributionspipeline.
Om du till exempel rutinmässigt kör Databricks-jobb som kräver anpassade paket med ett tidskrävande kompileringssteg vid installationen kan du påskynda utvecklingsloopen genom att skapa en paketmall som anger en anpassad containermiljö.
Databricks innehåller en uppsättning standardpaketmallar, men du kan också skapa anpassade paketmallar. Användarna kan sedan initiera paket med init-kommandot bundleoch ange en standardmall eller en anpassad mall.
Skapa ett paket med hjälp av en mall
Om du vill använda en Azure Databricks-paketmall för att skapa ditt paket använder du kommandot Databricks CLIbundle init
och anger namnet på mallen som ska användas. Följande kommando skapar till exempel ett paket med python-standardpaketmallen:
databricks bundle init default-python
Om du vill använda en anpassad paketmall skickar du mallens lokala sökväg eller fjärr-URL till kommandot Databricks CLIbundle init
.
Till exempel använder följande kommando den dab-container-template
mall som skapades i Självstudiekurs för Anpassad Paketmall:
databricks bundle init /projects/my-custom-bundle-templates/dab-container-template
Om du inte anger någon mall, uppmanar kommandot bundle init
med uppsättningen tillgängliga standardmallar att välja mellan.
Standardpaketmallar
Azure Databricks tillhandahåller följande standardpaketmallar:
Mall | beskrivning |
---|---|
default-python |
En mall för att använda Python med Databricks. Den här mallen skapar ett paket med ett jobb och en DLT-pipeline. Se standard-python. |
default-sql |
En mall för att använda SQL med Databricks. Den här mallen innehåller en konfigurationsfil som definierar ett jobb som kör SQL-frågor på ett SQL-lager. Se default-sql. |
dbt-sql |
En mall som använder dbt-core för lokal utveckling och paket för distribution. Den här mallen innehåller konfigurationen som definierar ett jobb med en dbt-uppgift, samt en konfigurationsfil som definierar dbt-profiler för distribuerade dbt-jobb. Se dbt-sql. |
mlops-stacks |
En avancerad fullstackmall för att starta nya MLOps-projekt. Se mlops-stacks och Databricks Asset Bundles for MLOps Stacks. |
Anpassade paketmallar
Paketmallar använder syntaxen för Go-paketmallar, vilket ger flexibilitet för de anpassade paketmallar som du kan skapa. Se dokumentationen för Go-paketmallen .
Mallprojektstrukturen
Ett paketmallsprojekt måste minst ha:
- En
databricks_template_schema.json
fil i projektroten som definierar en användaruppmaningsegenskap för namnet på paketprojektet. Se mallschemat. - En
databricks.yml.tmpl
fil som finns i entemplate
mapp som definierar konfigurationen för alla paket som skapats med mallen. Om filendatabricks.yml.tmpl
refererar till ytterligare*.yml.tmpl
konfigurationsmallar anger du platsen för dessa i mappningeninclude
. Se Konfigurationsmallar.
Dessutom speglas mappstrukturen och inkluderade filer i paketmallsprojektet template
mapp av paket som skapats med mallen. Om du till exempel vill att mallen ska generera ett paket med en enkel notebook-fil i mappen src
och en jobbdefinition som kör notebook-filen i mappen resources
, ordnar du mallprojektet så här:
basic-bundle-template
├── databricks_template_schema.json
└── template
└── {{.project_name}}
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── simple_notebook.ipynb
Tips
Namnet på projektmappen och namnet på jobbdefinitionsfilen i den här paketmallen använder en mallvariabel. Information om mallhjälpare och variabler finns i Mallhjälpare och variabler.
mallschema
Ett anpassat paketmallsprojekt måste innehålla en databricks_template_schema.json
JSON-fil i projektroten. Den här filen definierar fält som används av Databricks CLI när kommandot bundle init
körs, till exempel prompttext.
Följande grundläggande databricks_template_schema.json
-fil definierar en indatavariabel project_name
för paketprojektet, som innehåller promptmeddelandet och ett standardvärde. Sedan definieras ett meddelande om lyckad initiering av bunde-projekt som använder indatavariabelvärdet i meddelandet.
{
"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."
}
Fält för mallschema
Filen databricks_template_schema.json
stöder definition av indatavariabler för insamling av information under paketinitiering från användaren i fältet properties
, samt ytterligare fält för att anpassa initieringen.
Indatavariabler definieras i fältet properties
i mallschemat. Varje indatavariabel definierar metadata som behövs för att presentera en uppmaning till användaren under paketinitalisering. Värdet för variabeln är sedan tillgängligt med hjälp av mallvariabelsyntax, till exempel {{.project_name}}
.
Du kan också ange värden för vissa fält för att anpassa initieringsprocessen för paketet.
Schemafält som stöds visas i följande tabell.
Schemafält | beskrivning |
---|---|
properties |
Paketmallens indatavariabeldefinitioner. Databricks rekommenderar att du definierar minst en indatavariabel som är namnet på paketprojektet. |
properties.<variable_name> |
Namnet på indatavariabeln. |
properties.<variable_name>.default |
Ett standardvärde som ska användas om ett värde inte tillhandahålls av användaren med --config-file som en del av kommandot bundle init , eller på kommandoraden när de uppmanas att göra det. |
properties.<variable_name>.description |
Uppmaningsmeddelandet som är kopplat till indatavariabeln. |
properties.<variable_name>.enum |
En lista över möjliga värden för egenskapen, till exempel "enum": ["azure", "aws", "gcp"] . Om det här fältet har definierats visar Databricks CLI värdena i en lista på kommandoraden för att uppmana användaren att välja ett värde. |
properties.<variable_name>.order |
Ett heltal som definierar den relativa ordningen för indataegenskaperna. Detta styr i vilken ordning prompterna för dessa indatavariabler visas på kommandoraden. |
properties.<variable_name>.pattern |
Regexp-mönstret som ska användas för att verifiera användarindata, till exempel "pattern": "^[^ .\\\\/]{3,}$" . Mer information om regexp-syntax som stöds finns i https://github.com/google/re2/wiki/Syntax. |
properties.<variable_name>.pattern_match_failure_message |
Meddelandet som visas för användaren om värdet som anges av användaren inte matchar det angivna mönstret, till exempel Project name must be at least 3 characters long and cannot contain the following characters: \"\\\", \"/\", \" \" and \".\"." . |
properties.<variable_name>.skip_prompt_if |
Hoppa över att fråga efter indatavariabeln om det här schemat uppfylls av konfigurationen som redan finns. I så fall används standardvärdet för egenskapen i stället. Ett exempel finns i mallen mlops-stacks. Endast const jämförelser stöds. |
properties.<variable_name>.skip_prompt_if.properties.<previous_variable_name>.const |
Om värdet för <previous_variable_name> matchar konstanten som konfigurerats i skip_prompt_if , så kommer uppmaningen för <variable_name> att hoppas över. |
welcome_message |
Det första meddelandet till utdata innan användaren uppmanas att ange indata. |
success_message |
Meddelandet som ska skrivas ut när mallen har initierats. |
min_databricks_cli_version |
Den lägsta semverversionen av detta Databricks CLI som mallen kräver.
databricks bundle init misslyckas om CLI-versionen är mindre än den här versionen. |
version |
Reserverad för framtida användning. Versionen av schemat. Detta används för att avgöra om schemat är kompatibelt med den aktuella CLI-versionen. |
Konfigurationsmallar
En anpassad paketmall ska innehålla en databricks.yml.tmpl
fil i en template
mapp i paketmallsprojektet som används för att skapa paketprojektet databricks.yml
konfigurationsfil. Mallar för konfigurationsfiler för resurser kan skapas i mappen resources
. Fyll i dessa mallfiler med konfigurationsmallen YAML.
Följande enkla exempel på konfigurationsmallar för databricks.yml och tillhörande *_job.yml upprätta paketnamnet och två målmiljöer och definiera ett jobb som kör notebook-filen i paketet för paket som skapats med den här mallen. Dessa konfigurationsmallar utnyttjar paketersättningar och paketmallshjälpmedel.
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
mallhjälpare och variabler
Mallhjälpare är funktioner som tillhandahålls av Databricks som du kan använda i dina mallfiler för att hämta användarspecifik information vid körning eller interagera med mallmotorn. Du kan också definiera dina egna mallvariabler.
Följande mallhjälpare är tillgängliga för Databricks-paketmallsprojekt. Information om hur du använder Go-mallar och variabler finns i Go-mallar.
Assistent | beskrivning |
---|---|
{{url}} |
Ett alias för https://pkg.go.dev/net/url#Parse. Detta tillåter användning av alla metoder för url.URL . |
{{regexp}} |
Ett alias för https://pkg.go.dev/regexp#Compile. Detta tillåter användning av alla metoder för regexp.Regexp . |
{{random_int}} |
Returnerar, som en int, ett icke-negativt pseudo-slumpmässigt tal i halvöppet intervall (0,n). |
{{uuid}} |
Returnerar som en sträng ett UUID som är en 128-bitars (16 byte) universell unik IDentifier enligt definitionen i RFC 4122.Det här ID:t är stabilt under hela mallkörningen och kan användas för att fylla i fältet bundle.uuid i databricks.yml av mallförfattare. |
{{bundle_uuid}} |
Ett unikt ID för paketet. Flera anrop för den här funktionen returnerar samma UUID. |
{{pair}} |
Ett nyckelvärdepar. Detta används med hjälpverktyget map för att generera kartor som ska användas i en mall. |
{{map}} |
Konverterar en lista med par till ett kartobjekt. Det här är användbart om du vill skicka flera objekt till mallar som definierats i bibliotekskatalogen. Eftersom Go-textmallssyntaxen för att anropa en mall endast tillåter att du anger ett enda argument, kan den här funktionen användas för att lösa den begränsningen. På följande rad kan till exempel {{template "my_template" (map (pair "foo" $arg1) (pair "bar" $arg2))}} , $arg1 och $arg2 refereras till inifrån my_template som .foo och .bar . |
{{smallest_node_type}} |
Returnerar den minsta nodtypen. |
{{path_separator}} |
Sökvägsavgränsarens tecken för operativsystemet. Detta är / för Unix-baserade system och \ för Windows. |
{{workspace_host}} |
Arbetsytans värd-URL som användaren för närvarande autentiseras till. |
{{user_name}} |
Det fullständiga namnet på användaren som initierar mallen. |
{{short_name}} |
Det korta namnet på användaren som initierar mallen. |
{{default_catalog}} |
Returnerar standardkatalogen för arbetsytan. Om det inte finns något standardvärde, eller om Unity Catalog inte är aktiverat, returnerar detta en tom sträng. |
{{is_service_principal}} |
Om den aktuella användaren är en tjänstens huvudaktör eller inte. |
{{ skip <glob-pattern-relative-to-current-directory> }} |
Gör att mallmotorn hoppar över att generera alla filer och kataloger som matchar indataglobmönstret. Ett exempel finns i mallen mlops-stacks. |
Anpassade mallhjälpare
Om du vill definiera dina egna mallhjälpare skapar du en mallfil i library
-mappen för mallprojektet och använder Go-mallningssyntax för att definiera hjälp. Följande innehåll i en library/variables.tmpl
-fil definierar till exempel variablerna cli_version
och model_name
. När den här mallen används för att initiera ett paket skapas värdet för variabeln model_name
med hjälp av det input_project_name
fält som definierats i mallschemafilen. Värdet för det här fältvärdet är användarens indata efter en uppmaning.
{{ define `cli_version` -}}
v0.240.0
{{- end }}
{{ define `model_name` -}}
{{ .input_project_name }}-model
{{- end }}
Om du vill se ett fullständigt exempel kan du läsa filen mlops-stacks-mallvariabler.
Testa paketmallen
Slutligen ska du testa mallen. Använd till exempel Databricks CLI för att initiera ett nytt paket med hjälp av mallen som definierats i föregående avsnitt:
databricks bundle init basic-bundle-template
För prompten What is your bundle project name?
skriver du my_test_bundle
.
När testpaketet har skapats matas meddelandet om lyckat resultat från schemafilen ut. Om du undersöker innehållet i my_test_bundle
mappen bör du se följande:
my_test_bundle
├── databricks.yml
├── resources
│ └── my_test_bundle_job.yml
└── src
└── simple_notebook.ipynb
Och filen och jobbet databricks.yml
är nu anpassade:
# 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
Dela mallen
Om du vill dela den här paketmallen med andra kan du lagra den i versionskontroll med alla leverantörer som Git stöder och som användarna har åtkomst till. Om du vill köra bundle init
kommandot med en Git-URL kontrollerar du att databricks_template_schema.json
filen finns på rotplatsen i förhållande till git-URL:en.
Tips
Du kan placera databricks_template_schema.json
filen i en annan mapp i förhållande till paketets rot. Du kan sedan använda bundle init
kommandots --template-dir
alternativ för att referera till mappen, som innehåller databricks_template_schema.json
filen.
Nästa steg
- Bläddra bland ytterligare mallar som skapas och underhålls av Databricks. Se lagringsplatsen för paketexempel i GitHub.
- Information om hur du använder MLOps Stacks med Databricks Asset Bundle-mallar finns i Databricks Tillgångspaket för MLOps Stacks.
- Lär dig mer om malldesign för Go-paket. Se dokumentationen för Go-paketmallen .