Delen via


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 een template map die de configuratie definieert voor alle bundels die met de sjabloon zijn gemaakt. Als uw databricks.yml.tmpl bestand verwijst naar aanvullende *.yml.tmpl configuratiesjablonen, geeft u de locatie van deze sjablonen op in de include 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.jsonJSON-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.URLmogelijk.
{{regexp}} Een alias voor https://pkg.go.dev/regexp#Compile. Dit maakt het gebruik van alle methoden van regexp.Regexpmogelijk.
{{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