Szablony projektów pakietu zasobów usługi Databricks
Pakiety zasobów Databricks opisują zasoby Databricks, takie jak zadania, potoki i notesy, jako pliki źródłowe, umożliwiając dołączanie metadanych do tych plików w celu przygotowania infrastruktury i innych zasobów, oraz dostarczają kompleksową definicję projektu — wszystko to spakowane jako jeden łatwy do wdrożenia pakiet projektowy. Zobacz Co to są pakiety zasobów Databricks?.
Szablony pakietów umożliwiają użytkownikom tworzenie pakietów w spójny, powtarzalny sposób przez ustanowienie struktur folderów, kroków kompilacji i zadań, testów i innych atrybutów infrastruktury jako kodu (IaC) devOps wspólnych w potoku wdrażania.
Jeśli na przykład rutynowo uruchamiasz zadania usługi Databricks, które wymagają pakietów niestandardowych z czasochłonnym krokiem kompilacji podczas instalacji, możesz przyspieszyć pętlę programowania, tworząc szablon pakietu, który określa niestandardowe środowisko kontenera.
Usługa Databricks udostępnia zestaw domyślnych szablonów pakietów , ale można również utworzyć szablony pakietów niestandardowych . Użytkownicy mogą następnie inicjować pakiety przy użyciu polecenia bundle init, określając szablon domyślny lub własny szablon.
Tworzenie pakietu przy użyciu szablonu
Aby utworzyć pakiet przy użyciu szablonu pakietu usługi Azure Databricks, użyj interfejsu wiersza polecenia usługi Databricksbundle init
, określając nazwę szablonu do użycia. Na przykład następujące polecenie tworzy pakiet przy użyciu domyślnego szablonu pakietu języka Python:
databricks bundle init default-python
Aby użyć niestandardowego szablonu pakietu, przekaż ścieżkę lokalną lub zdalny adres URL szablonu do polecenia Databricks CLIbundle init
.
Na przykład, następujące polecenie używa szablonu dab-container-template
stworzonego w Poradniku dotyczącym tworzenia niestandardowego szablonu pakietu.
databricks bundle init /projects/my-custom-bundle-templates/dab-container-template
Jeśli nie określisz szablonu, wiersz polecenia bundle init
podpowiada zestaw dostępnych domyślnych szablonów, z którego można wybrać.
Domyślne szablony pakietów
Usługa Azure Databricks udostępnia następujące domyślne szablony pakietów:
Szablon | opis |
---|---|
default-python |
Szablon do używania języka Python z usługą Databricks. Ten szablon tworzy pakiet zawierający zadanie i strukturę DLT. Zobacz default-python. |
default-sql |
Szablon do używania języka SQL z usługą Databricks. Ten szablon zawiera plik konfiguracji, który definiuje zadanie uruchamiające zapytania SQL w usłudze SQL Warehouse. Zobacz default-sql. |
dbt-sql |
Szablon, który korzysta z bazy danych dbt-core na potrzeby programowania lokalnego i pakietów do wdrożenia. Ten szablon zawiera konfigurację, która definiuje zadanie z zadaniem dbt, a także plik konfiguracji definiujący profile dbt dla wdrożonych zadań dbt. Zobacz dbt-sql. |
mlops-stacks |
Zaawansowany szablon pełnego stacku do tworzenia nowych projektów MLOps Stacks. Zobacz mlops-stacks i Pakiety zasobów Databricks dla stosów MLOps. |
szablony pakietów niestandardowych
Szablony pakietów używają składni tworzenia szablonów pakietów języka Go, która zapewnia elastyczność szablonów pakietów niestandardowych, które można utworzyć. Zapoznaj się z dokumentacją szablonu pakietu Go.
struktura projektu szablonu
Co najmniej projekt szablonu pakietu musi mieć następujące elementy:
- Plik
databricks_template_schema.json
w katalogu głównym projektu, który definiuje jedną właściwość monitu użytkownika dla nazwy projektu pakietu. Zobacz Schemat szablonu. -
databricks.yml.tmpl
Plik znajdujący się w folderze definiującym konfiguracjętemplate
wszystkich pakietów utworzonych za pomocą szablonu. Jeśli plikdatabricks.yml.tmpl
odwołuje się do dodatkowych szablonów konfiguracji*.yml.tmpl
, określ lokalizację tych szablonów w mapowaniuinclude
. Zobacz szablony konfiguracji .
Dodatkowo, struktura folderów oraz dołączone pliki projektu szablonu pakietu template
są odwzorowane przez pakiety utworzone z użyciem tego szablonu. Jeśli na przykład chcesz, aby szablon wygenerował pakiet z prostym notesem w folderze src
i definicją zadania uruchamiającą notes w folderze resources
, należy zorganizować projekt szablonu w następujący sposób:
basic-bundle-template
├── databricks_template_schema.json
└── template
└── {{.project_name}}
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── simple_notebook.ipynb
Napiwek
Nazwa folderu projektu i nazwa pliku definicji zadania w tym szablonie pakietu używają zmiennej szablonu. Aby uzyskać informacje o pomocnikach i zmiennych szablonów, zobacz Pomocnicy szablonów i zmienne.
schemat szablonu
Projekt niestandardowego szablonu pakietu musi zawierać plik databricks_template_schema.json
JSON w katalogu głównym projektu. Ten plik definiuje pola używane przez interfejs wiersza polecenia usługi Databricks, gdy jest uruchamiane polecenie bundle init
, takie jak tekst monitu.
Poniższy podstawowy plik databricks_template_schema.json
definiuje zmienną wejściową project_name
dla projektu pakietu, która zawiera komunikat monitu i wartość domyślną. Następnie definiuje komunikat o powodzeniu inicjowania projektu bunde, który używa wartości zmiennej wejściowej w komunikacie.
{
"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."
}
Pola schematu szablonu
Plik databricks_template_schema.json
obsługuje definiowanie zmiennych wejściowych do zbierania informacji podczas inicjowania pakietu od użytkownika w polu properties
, a także dodatkowe pola w celu dostosowania inicjowania.
Zmienne wejściowe są definiowane w polu properties
schematu szablonu. Każda zmienna wejściowa definiuje metadane potrzebne do przedstawienia użytkownikowi monitu podczas inicjowania pakietu. Wartość zmiennej jest następnie dostępna przy użyciu składni zmiennej szablonu, takiej jak {{.project_name}}
.
Można również ustawić wartości niektórych pól, aby dostosować proces inicjowania pakietu.
Obsługiwane pola schematu są wymienione w poniższej tabeli.
Pole schematu | opis |
---|---|
properties |
Definicje zmiennych wejściowych szablonu pakietu. Usługa Databricks zaleca zdefiniowanie co najmniej jednej zmiennej wejściowej, która jest nazwą projektu pakietu. |
properties.<variable_name> |
Nazwa zmiennej wejściowej. |
properties.<variable_name>.default |
Domyślna wartość, którą należy użyć, jeśli użytkownik nie poda wartości za pomocą --config-file jako części polecenia bundle init lub w wierszu polecenia, gdy jest o nią poproszony. |
properties.<variable_name>.description |
Komunikat użytkownika związany ze zmienną wejściową. |
properties.<variable_name>.enum |
Lista możliwych wartości właściwości, takich jak "enum": ["azure", "aws", "gcp"] . Jeśli to pole jest zdefiniowane, interfejs wiersza polecenia usługi Databricks wyświetla wartości na liście w wierszu polecenia, aby monitować użytkownika o wybranie wartości. |
properties.<variable_name>.order |
Liczba całkowita, która definiuje względną kolejność właściwości wejściowych. To określa kolejność, w jakiej monity dotyczące tych zmiennych wejściowych są wyświetlane w wierszu polecenia. |
properties.<variable_name>.pattern |
Wzorzec regexp używany do sprawdzania poprawności danych wejściowych użytkownika, na przykład "pattern": "^[^ .\\\\/]{3,}$" . Aby uzyskać informacje o obsługiwanej składni regexp, zobacz https://github.com/google/re2/wiki/Syntax. |
properties.<variable_name>.pattern_match_failure_message |
Komunikat wyświetlany użytkownikowi, jeśli wartość wprowadzona przez użytkownika nie jest zgodna z określonym wzorcem, na przykład Project name must be at least 3 characters long and cannot contain the following characters: \"\\\", \"/\", \" \" and \".\"." . |
properties.<variable_name>.skip_prompt_if |
Pomiń pytanie o zmienną wejściową, jeśli konfiguracja już spełnia ten schemat. W takim przypadku jest używana wartość domyślna właściwości. Przykład można znaleźć w szablonie mlops-stacks. Obsługiwane są tylko const porównania. |
properties.<variable_name>.skip_prompt_if.properties.<previous_variable_name>.const |
Jeśli wartość <previous_variable_name> odpowiada stałej skonfigurowanej w skip_prompt_if , wywołanie dla <variable_name> zostanie pominięte. |
welcome_message |
Pierwsza wiadomość przed poproszeniem użytkownika o wprowadzenie danych. |
success_message |
Komunikat do wydrukowania po pomyślnym zainicjowaniu szablonu. |
min_databricks_cli_version |
Minimalna wersja semantyczna (semver) tego interfejsu wiersza polecenia Databricks wymagana przez szablon.
databricks bundle init zawodzi, jeśli wersja CLI jest mniejsza niż ta wersja. |
version |
Zarezerwowane na przyszłość. Wersja schematu. Służy do określania, czy schemat jest zgodny z bieżącą wersją interfejsu wiersza polecenia. |
szablony konfiguracji
Szablon pakietu niestandardowego powinien zawierać plik databricks.yml.tmpl
w folderze template
w projekcie szablonu pakietu, który jest używany do tworzenia pliku konfiguracji projektu pakietu databricks.yml
. Szablony plików konfiguracji dla zasobów można utworzyć w folderze resources
. Wypełnij te pliki szablonu przy użyciu szablonu konfiguracji YAML.
Poniższe proste, przykładowe szablony konfiguracji dla databricks.yml i skojarzone *_job.yml ustalają nazwę pakietu oraz dwa środowiska docelowe, a także definiują zadanie uruchamiające notatnik w ramach pakietu, dla pakietów utworzonych przy użyciu tego szablonu. Te szablony konfiguracji korzystają z podstawień pakietów i pomocników szablonów pakietów .
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
Pomocnicy szablonów i zmienne
Pomocnicy szablonów to funkcje udostępniane przez usługę Databricks, których można używać w plikach szablonów, aby uzyskać informacje specyficzne dla użytkownika podczas wykonywania lub interakcji z silnikiem szablonów. Możesz również zdefiniować własne zmienne szablonu.
Następujące pomocniki szablonów są dostępne dla projektów szablonów pakietu usługi Databricks. Aby uzyskać informacje na temat używania szablonów i zmiennych języka Go, zobacz Szablony języka Go.
Pomocnik | opis |
---|---|
{{url}} |
Alias dla https://pkg.go.dev/net/url#Parse. Umożliwia to użycie wszystkich metod url.URL . |
{{regexp}} |
Alias dla https://pkg.go.dev/regexp#Compile. Umożliwia to użycie wszystkich metod regexp.Regexp . |
{{random_int}} |
Zwraca, jako wartość typu int, nieujemną liczbę pseudolosową w przedziale półotwartym (0, n). |
{{uuid}} |
Zwraca ciąg znaków będący identyfikatorem UUID, który jest 128-bitowym (16 bajtami) uniwersalnym unikatowym identyfikatorem zdefiniowanym w dokumencie RFC 4122. Ten identyfikator jest stabilny przez czas wykonywania szablonu i może być używany do wypełniania pola bundle.uuid w pliku databricks.yml przez autorów szablonów. |
{{bundle_uuid}} |
Unikatowy identyfikator pakietu. Wiele wywołań tej funkcji zwróci ten sam identyfikator UUID. |
{{pair}} |
Para wartości klucza. Jest on używany z pomocnikiem map do generowania map używanych wewnątrz szablonu. |
{{map}} |
Konwertuje listę par na obiekt mapy. Jest to przydatne w przypadku przekazywania wielu obiektów do szablonów zdefiniowanych w katalogu biblioteki. Ponieważ składnia szablonu tekstowego języka Go do wywoływania szablonu zezwala tylko na określenie jednego argumentu, ta funkcja może służyć do obejścia tego ograniczenia. Na przykład w poniższym wierszu można odwołać się do {{template "my_template" (map (pair "foo" $arg1) (pair "bar" $arg2))}} , $arg1 i $arg2 z wnętrza my_template jako .foo i .bar . |
{{smallest_node_type}} |
Zwraca najmniejszy typ węzła. |
{{path_separator}} |
Znak separatora ścieżki dla systemu operacyjnego. Jest to / dla systemów unix i \ dla systemu Windows. |
{{workspace_host}} |
Adres URL hosta obszaru roboczego, do którego użytkownik jest obecnie zalogowany. |
{{user_name}} |
Pełna nazwa użytkownika inicjującego szablon. |
{{short_name}} |
Krótka nazwa użytkownika inicjującego szablon. |
{{default_catalog}} |
Zwraca domyślny wykaz obszarów roboczych. Jeśli nie ma wartości domyślnej lub jeśli Unity Catalog nie jest włączony, zwraca pusty ciąg. |
{{is_service_principal}} |
Czy bieżący użytkownik jest jednostką usługi, czy nie. |
{{ skip <glob-pattern-relative-to-current-directory> }} |
Powoduje, że silnik szablonów pomija generowanie wszystkich plików i katalogów pasujących do wzorca wejściowego globu. Przykład można znaleźć w szablonie mlops-stacks. |
Niestandardowe pomocniki szablonów
Aby zdefiniować własne pomocniki szablonu, utwórz plik szablonu w folderze library
projektu szablonu i użyj składni szablonu Języka Go, aby zdefiniować pomocników. Na przykład następująca zawartość pliku library/variables.tmpl
definiuje zmienne cli_version
i model_name
. Gdy ten szablon jest używany do inicjowania pakietu, wartość zmiennej model_name
jest konstruowana przy użyciu pola input_project_name
zdefiniowanego w pliku schematu szablonu. Wartość tego pola to dane wejściowe użytkownika po wyświetleniu monitu.
{{ define `cli_version` -}}
v0.240.0
{{- end }}
{{ define `model_name` -}}
{{ .input_project_name }}-model
{{- end }}
Aby wyświetlić pełny przykład, zapoznaj się z plikiem zmiennych szablonu mlops-stacks.
Testowanie szablonu pakietu
Na koniec upewnij się, że szablon został przetestowany. Na przykład użyj interfejsu wiersza polecenia usługi Databricks, aby zainicjować nowy pakiet przy użyciu szablonu zdefiniowanego w poprzednich sekcjach:
databricks bundle init basic-bundle-template
Dla monitu What is your bundle project name?
wpisz my_test_bundle
.
Po utworzeniu pakietu testowego zostanie wyświetlony komunikat o powodzeniu z pliku schematu. Jeśli zbadasz zawartość my_test_bundle
folderu, powinny zostać wyświetlone następujące elementy:
my_test_bundle
├── databricks.yml
├── resources
│ └── my_test_bundle_job.yml
└── src
└── simple_notebook.ipynb
Plik i zadanie databricks.yml
są teraz dostosowane:
# 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
Udostępnianie szablonu
Jeśli chcesz udostępnić ten szablon pakietu innym osobom, możesz przechowywać go w kontroli wersji za pomocą dowolnego dostawcy obsługiwanego przez usługę Git i do którego użytkownicy mają dostęp. Aby uruchomić polecenie bundle init
z adresem URL Git, upewnij się, że plik databricks_template_schema.json
znajduje się w katalogu głównym względem tego adresu URL Git.
Napiwek
Można umieścić plik databricks_template_schema.json
w innym folderze względem katalogu głównego pakietu. Następnie możesz użyć opcji bundle init
polecenia --template-dir
, aby odwołać się do tego folderu, który zawiera plik databricks_template_schema.json
.
Następne kroki
- Przeglądaj dodatkowe szablony tworzone i obsługiwane przez usługę Databricks. Zobacz repozytorium przykładów pakietów w usłudze GitHub.
- Aby używać stosów MLOps z szablonami pakietów zasobów usługi Databricks, zobacz Pakiety zasobów usługi Databricks dla stosów MLOps.
- Dowiedz się więcej o tworzeniu szablonów pakietów języka Go. Zapoznaj się z dokumentacją szablonu pakietu Go.