Créer un template de bundle personnalisé
Dans ce tutoriel, vous allez créer un Template personnalisé pour créer des Declarative Automation Bundles qui exécutent un Job avec une tâche Python sur un cluster à l'aide d'une image conteneur Docker spécifique.
Pour plus d'informations sur les Template de bundles personnalisés, consultez Template de bundles personnalisés.
Exigences
- Installez la CLI Databricks version 0.218.0 ou supérieure. Si vous l'avez déjà installé, confirmez que la version est 0.218.0 ou supérieure en exécutant
databricks -versiondepuis la ligne de commande.
Définir les variables d’invite utilisateur
Tout d'abord, définissez les databricks bundle init variables d'invite utilisateur. Depuis la ligne de commande :
-
Créez un dossier vide nommé
dab-container-template:shmkdir dab-container-template -
À la racine du dossier, créez un fichier nommé
databricks_template_schema.json:shcd dab-container-template
touch databricks_template_schema.json -
Ajoutez le JSON suivant au fichier
databricks_template_schema.jsonpour définir une invite utilisateur pour le nom du projet de bundle :JSON{
"properties": {
"project_name": {
"type": "string",
"default": "project_name",
"description": "Project name",
"order": 1
}
}
}
Créer la structure du dossier du bundle
Ensuite, créez un dossier template pour contenir la structure de dossiers de vos bundles générés. Les noms des sous-répertoires et des fichiers suivent la syntaxe de Template de package Go.
Ce Template crée le dossier du projet du bundle en fonction de l'invite du nom de projet :
mkdir -p "template/{{.project_name}}"
Créez maintenant les sous-répertoires resources et src pour les fichiers de bundle :
mkdir -p "template/{{.project_name}}/resources"
mkdir -p "template/{{.project_name}}/src"
Ajoutez des Templates de configuration YAML
Dans le dossier template/{{.project_name}}, créez un fichier nommé databricks.yml.tmpl:
touch template/{{.project_name}}/databricks.yml.tmpl
Ajoutez le YAML suivant à databricks.yml.tmpl. Cet exemple utilise les assistants de Template de bundle.
# This is a 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 Lakeflow pipelines.
mode: development
default: true
workspace:
host: {{workspace_host}}
# The 'prod' target, used for production deployment.
prod:
# For production deployments, there is only a single copy, so 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. Avoid /Shared, which is writable
# by all workspace users.
#
# 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: /Workspace/Production/.bundle/${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 -}}
Créez un autre fichier YAML nommé {{.project_name}}_job.yml.tmpl dans le dossier template/{{.project_name}}/resources. Ce nouveau fichier YAML contient la définition du Job.
touch template/{{.project_name}}/resources/{{.project_name}}_job.yml.tmpl
Ajoutez le YAML suivant à ce fichier pour décrire le Job Template, qui contient une tâche Python à exécuter sur un cluster de Job à l'aide d'une image de conteneur Docker spécifique. Cet exemple utilise une image de conteneur Docker de base Databricks default, mais vous pouvez spécifier votre propre image personnalisée à la place.
# 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/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
Ajouter les fichiers référencés dans votre configuration
Ensuite, créez le fichier de tâche Python référencé par le Job dans le Template :
touch template/{{.project_name}}/src/task.py
Maintenant, ajoutez les éléments suivants à task.py:
print(f'Spark version{spark.version}')
Vérifiez la structure du Template de bundle.
Passez en revue la structure de dossiers de votre projet de template de bundle. Cela devrait ressembler à ceci :
dab-container-template
├── databricks_template_schema.json
└── template
├── {{.project_name}}
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── task.py
Tester votre Template
Enfin, testez votre template de bundle. Pour générer un bundle basé sur votre nouveau template personnalisé, utilisez la commande databricks bundle init, en spécifiant le nouvel emplacement du template. Depuis votre dossier racine des projets de bundle :
databricks bundle init dab-container-template
Pour rendre votre Template personnalisé disponible aux autres utilisateurs directement dans le Workspace, stockez-le dans un repository Git et configurez un dossier de Template personnalisé. Les utilisateurs peuvent ensuite le sélectionner lorsqu'ils créent un bundle dans le workspace, sans utiliser la CLI. Voir Configurer un dossier de template personnalisé dans le workspace.
Étapes suivantes
- Créez un bundle qui déploie un Notebook dans un Workspace Databricks, puis exécute ce Notebook déployé en tant que Job Databricks. Consultez Développer un Job avec des Declarative Automation Bundles.
- Créez un bundle qui déploie un notebook dans un workspace Databricks, puis exécute ce notebook déployé en tant que pipeline ETL. Voir Développer des pipelines avec des Declarative Automation Bundles.
- Créez un bundle qui déploie et exécute une pile MLOps. Consultez Declarative Automation Bundles pour les piles MLOps.
- Ajouter un bundle à un workflow CI/CD (intégration continue/déploiement continu) dans GitHub. See GitHub Actions.
- Rendez votre Template personnalisé disponible aux autres utilisateurs dans le workspace en configurant un dossier de Templates personnalisés. Consultez Configurez un dossier de Template personnalisés dans le Workspace.