Samouczek: tworzenie pierwszego niestandardowego szablonu pakietu zasobów usługi Databricks
W tym samouczku utworzysz niestandardowy szablon pakietu zasobów usługi Databricks na potrzeby tworzenia pakietów, które uruchamiają zadanie z określonym zadaniem języka Python w klastrze przy użyciu określonego obrazu kontenera platformy Docker.
Przed rozpoczęciem
Zainstaluj interfejs wiersza polecenia usługi Databricks w wersji 0.218.0 lub nowszej. Jeśli został już zainstalowany, upewnij się, że wersja to 0.218.0 lub nowsza, uruchamiając polecenie databricks -version
z poziomu wiersza polecenia.
Definiowanie zmiennych monitu użytkownika
Pierwszym krokiem tworzenia szablonu pakietu jest zdefiniowanie databricks bundle init
zmiennych monitu użytkownika. Za pomocą wiersza polecenia:
Utwórz pusty katalog o nazwie
dab-container-template
:mkdir dab-container-template
W katalogu głównym utwórz plik o nazwie
databricks_template_schema.json
:cd dab-container-template touch databricks_template_schema.json
Dodaj następującą zawartość do pliku
databricks_template_schema.json
i zapisz go. Każda zmienna zostanie przetłumaczona na monit użytkownika podczas tworzenia pakietu.{ "properties": { "project_name": { "type": "string", "default": "project_name", "description": "Project name", "order": 1 } } }
Tworzenie struktury folderów pakietu
Następnie w katalogu szablonu utwórz podkatalogi o nazwach resources
i src
. Folder template
zawiera strukturę katalogów wygenerowanych pakietów. Nazwy podkatalogów i plików będą zgodne ze składnią szablonu pakietu Go, gdy pochodzą z wartości użytkownika.
mkdir -p "template/resources"
mkdir -p "template/src"
Dodawanie szablonów konfiguracji YAML
template
W katalogu utwórz plik o nazwie databricks.yml.tmpl
i dodaj następujący kod YAML:
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 Delta Live Tables 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 -}}
Utwórz inny plik YAML o nazwie {{.project_name}}_job.yml.tmpl
i umieść go w template/resources
katalogu. Ten nowy plik YAML dzieli definicje zadań projektu z pozostałej części definicji pakietu. Dodaj następujący kod YAML do tego pliku, aby opisać zadanie szablonu, które zawiera określone zadanie języka Python do uruchomienia w klastrze zadań przy użyciu określonego obrazu kontenera platformy Docker:
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
W tym przykładzie użyjesz domyślnego obrazu kontenera platformy Docker usługi Databricks, ale zamiast tego możesz określić własny obraz niestandardowy.
Dodawanie plików, do których odwołuje się konfiguracja
Następnie utwórz template/src/{{.project_name}}
katalog i utwórz plik zadania języka Python, do których odwołuje się zadanie w szablonie:
mkdir -p template/src/{{.project_name}}
touch template/src/{{.project_name}}/task.py
Teraz dodaj następujące polecenie do :task.py
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.master('local[*]').appName('example').getOrCreate()
print(f'Spark version{spark.version}')
Weryfikowanie struktury szablonu pakietu
Przejrzyj strukturę folderów projektu szablonu pakietu. Powinien on wyglądać następująco:
.
├── databricks_template_schema.json
└── template
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── {{.project_name}}
└── task.py
Testowanie szablonu
Na koniec przetestuj szablon pakietu. Aby wygenerować pakiet na podstawie nowego szablonu niestandardowego, użyj databricks bundle init
polecenia , określając nową lokalizację szablonu. Z folderu głównego projektów pakietu:
mkdir my-new-container-bundle
cd my-new-container-bundle
databricks bundle init dab-container-template
Następne kroki
- Utwórz pakiet, który wdraża notes w obszarze roboczym usługi Azure Databricks, a następnie uruchamia ten notes jako zadanie usługi Azure Databricks. Zobacz Tworzenie zadania w usłudze Azure Databricks przy użyciu pakietów zasobów usługi Databricks.
- Utwórz pakiet, który wdraża notes w obszarze roboczym usługi Azure Databricks, a następnie uruchamia ten notes jako potok Delta Live Tables. Zobacz Tworzenie potoków tabel delta live z pakietami zasobów usługi Databricks.
- Utwórz pakiet, który wdraża i uruchamia stos MLOps. Zobacz Pakiety zasobów usługi Databricks dla stosów MLOps.
- Dodaj pakiet do przepływu pracy ciągłej integracji/ciągłego wdrażania w usłudze GitHub. Zobacz Uruchamianie przepływu pracy ciągłej integracji/ciągłego wdrażania za pomocą pakietu zasobów usługi Databricks i funkcji GitHub Actions.