Partager via


Modèles de projets de packs de ressources Databricks

Les bundles de ressources Databricks décrivent les ressources Databricks, telles que les travaux, les pipelines et les notebooks en tant que fichiers sources, vous permettent d’inclure des métadonnées en même temps que ces fichiers sources pour approvisionner l’infrastructure et d’autres ressources, et fournir une définition de bout en bout d’un projet, toutes empaquetées en tant que projet déployable unique. Consultez Que sont les packs de ressources Databricks ?.

Les modèles de bundle permettent aux utilisateurs de créer des bundles de manière cohérente et reproductible, en établissant des structures de dossiers, des étapes de génération et des tâches, des tests et d’autres attributs IaC (Infrastructure-as-code) DevOps courants dans un pipeline de déploiement.

Par exemple, si vous exécutez régulièrement des travaux Databricks qui nécessitent des packages personnalisés avec une étape de compilation fastidieuse lors de l’installation, vous pouvez accélérer votre boucle de développement en créant un modèle de bundle qui spécifie un environnement de conteneur personnalisé.

Databricks fournit un ensemble de modèles de bundle par défaut, mais vous pouvez également créer modèles de bundle personnalisés. Les utilisateurs peuvent ensuite initialiser des offres groupées à l’aide de la commande init , en spécifiant un modèle par défaut ou votre modèle personnalisé.

Créer un bundle à l’aide d’un modèle

Pour utiliser un modèle de package Azure Databricks pour créer votre package, utilisez la commande de l'interface en ligne de commande Databricks bundle init, en spécifiant le nom du modèle à utiliser. Par exemple, la commande suivante crée un pack en utilisant le modèle de pack Python par défaut :

databricks bundle init default-python

Pour utiliser un modèle de bundle personnalisé, fournissez le chemin local ou l’URL distante du modèle à la commande Databricks CLIbundle init.

Par exemple, la commande suivante utilise le modèle dab-container-template créé dans le tutoriel Modèle de pack personnalisé :

databricks bundle init /projects/my-custom-bundle-templates/dab-container-template

Si vous ne spécifiez pas de modèle, la commande bundle init vous invite avec l’ensemble des modèles par défaut disponibles parmi lesquels vous pouvez choisir.

Modèles de pack par défaut

Azure Databricks fournit les modèles de pack par défaut suivants :

Modèle Description
default-python Un modèle pour utiliser Python avec Databricks. Ce modèle crée un ensemble comprenant un travail et un pipeline DLT. Reportez-vous à default-python.
default-sql Un modèle pour utiliser SQL avec Databricks. Ce modèle contient un fichier de configuration qui définit un travail qui exécute des requêtes SQL sur un entrepôt SQL. Reportez-vous à default-sql.
dbt-sql Un modèle qui tire parti de dbt-core pour le développement local et de packs pour le déploiement. Ce modèle contient la configuration qui définit un travail avec une tâche dbt ainsi qu’un fichier de configuration qui définit des profils dbt pour les travaux dbt déployés. Reportez-vous à dbt-sql.
mlops-stacks Un modèle avancé de full stack pour démarrer de nouveaux projets de stacks MLOps. Reportez-vous à mlops-stacks et à Packs de ressources Databricks pour des piles MLOps.

Modèles de packs personnalisés

Les modèles de bundle utilisent la syntaxe de création de modèles de package Go, qui offrent une flexibilité sur les modèles de bundle personnalisés que vous pouvez créer. Consultez la documentation du Modèle de package Go.

structure de projet modèle

Au minimum, un projet de modèle de pack doit avoir :

  • Un fichier databricks_template_schema.json à la racine du projet qui définit une propriété d’invite utilisateur pour le nom du projet de pack. Consultez le schéma de modèle .
  • Un fichier databricks.yml.tmpl qui se trouve dans un dossier template, qui définit la configuration des packs créés avec le modèle. Si votre fichier databricks.yml.tmpl fait référence à des modèles de configuration de *.yml.tmpl supplémentaires, spécifiez l’emplacement de ces modèles dans le mappage include. Consultez les modèles de configuration .

En outre, la structure de dossiers et les fichiers inclus du projet de modèle groupé template dossier sont mis en miroir par les bundles créés avec le modèle. Par exemple, si vous souhaitez que le modèle génère un bundle avec un bloc-notes simple dans le dossier src et une définition de travail qui exécute le bloc-notes dans le dossier resources, vous organisez votre projet de modèle comme suit :

basic-bundle-template
  ├── databricks_template_schema.json
  └── template
      └── {{.project_name}}
          ├── databricks.yml.tmpl
          ├── resources
          │   └── {{.project_name}}_job.yml.tmpl
          └── src
              └── simple_notebook.ipynb

Conseil

Le nom du dossier du projet et le nom du fichier de définition de travail dans ce modèle d’offre groupée utilisent une variable de modèle. Pour plus d’informations sur les assistants de modèle et les variables, consultez Template helpers and variables.

schéma de modèle

Un projet de modèle de bundle personnalisé doit contenir un fichier JSON databricks_template_schema.json à la racine du projet. Ce fichier définit les champs utilisés par l’interface CLI Databricks lorsque la commande bundle init est exécutée, par exemple le texte d’invite.

Le fichier de base databricks_template_schema.json suivant définit une variable d’entrée project_name pour le projet groupé, qui inclut le message d’invite et une valeur par défaut. Il définit ensuite un message de réussite pour l’initialisation du projet bunde qui utilise la valeur de variable d’entrée dans le message.

{
  "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."
}

Champs de modèle de schéma

Le fichier databricks_template_schema.json prend en charge la définition de variables d’entrée pour la collecte d’informations lors de l’initialisation de bundle à partir de votre utilisateur dans le champ properties, ainsi que d’autres champs pour personnaliser l’initialisation.

Les variables d’entrée sont définies dans le champ properties du schéma de modèle. Chaque variable d’entrée définit les métadonnées nécessaires pour présenter une invite à l’utilisateur lors de l’initalisation de l’offre groupée. La valeur de la variable est ensuite accessible à l’aide de la syntaxe de variable de modèle, telle que {{.project_name}}.

Vous pouvez également définir les valeurs de certains champs pour personnaliser le processus d’initialisation de bundle.

Les champs de schéma pris en charge sont répertoriés dans le tableau suivant.

Champ de schéma Description
properties Définitions de variables d’entrée de modèle de bundle. Databricks recommande de définir au moins une variable d’entrée qui est le nom du projet groupé.
properties.<variable_name> Nom de la variable d’entrée.
properties.<variable_name>.default Valeur par défaut à utiliser si une valeur n’est pas fournie par l’utilisateur avec --config-file dans le cadre de la commande bundle init, ou à la ligne de commande lorsqu’il est invité à le saisir.
properties.<variable_name>.description Message d’invite utilisateur associé à la variable d’entrée.
properties.<variable_name>.enum Liste des valeurs possibles pour la propriété, telles que "enum": ["azure", "aws", "gcp"]. Si ce champ est défini, l’interface CLI Databricks présente les valeurs d’une liste sur la ligne de commande pour inviter l’utilisateur à sélectionner une valeur.
properties.<variable_name>.order Entier qui définit l’ordre relatif des propriétés d’entrée. Cela contrôle l’ordre dans lequel les demandes pour ces variables d’entrée sont affichées dans le terminal.
properties.<variable_name>.pattern Modèle regexp à utiliser pour valider l’entrée utilisateur, par exemple "pattern": "^[^ .\\\\/]{3,}$". Pour connaître la syntaxe regexp prise en charge, consultez https://github.com/google/re2/wiki/Syntax.
properties.<variable_name>.pattern_match_failure_message Message affiché à l’utilisateur si la valeur entrée par l’utilisateur ne correspond pas au modèle spécifié, par exemple, Project name must be at least 3 characters long and cannot contain the following characters: \"\\\", \"/\", \" \" and \".\".".
properties.<variable_name>.skip_prompt_if Ignorez l’invite pour la variable d’entrée si ce schéma est satisfait par la configuration déjà présente. Dans ce cas, la valeur par défaut de la propriété est utilisée à la place. Pour obtenir un exemple, consultez le modèle mlops-stacks. Seules les comparaisons de type const sont prises en charge.
properties.<variable_name>.skip_prompt_if.properties.<previous_variable_name>.const Si la valeur de <previous_variable_name> correspond à la constante configurée dans skip_prompt_if, l’invite de <variable_name> est ignorée.
welcome_message Premier message à générer avant d’inviter l’utilisateur à entrer.
success_message Message à imprimer après l’initialisation du modèle.
min_databricks_cli_version Version SemVer minimale de cette interface CLI Databricks requise par le modèle. databricks bundle init échoue si la version cli est inférieure à cette version.
version Réservé pour une utilisation ultérieure. Version du schéma. Cela permet de déterminer si le schéma est compatible avec la version actuelle de l’interface CLI.

modèles de configuration de

Un modèle de bundle personnalisé doit contenir un fichier databricks.yml.tmpl dans un dossier template dans le projet de modèle de bundle utilisé pour créer le projet groupé databricks.yml fichier de configuration. Les modèles de fichiers de configuration pour les ressources peuvent être créés dans le dossier resources. Remplissez ces fichiers de modèle avec le modèle de configuration YAML.

Les modèles de configuration d'exemples simples suivants pour databricks.yml et le *_job.yml associé établissent le nom du bundle et deux environnements cibles, et définissent un travail qui exécute le notebook dans le bundle, pour les bundles créés à l'aide de ce modèle. Ces modèles de configuration tirent parti des substitutions de bundle et des assistants de modèles de bundle.

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

Assistants et variables de modèle

Les helpers de modèle sont des fonctions fournies par Databricks que vous pouvez utiliser dans vos fichiers modèles pour obtenir des informations spécifiques à l’utilisateur au moment de l’exécution ou interagir avec le moteur de modèle. Vous pouvez également définir vos propres variables de modèle.

Les assistants de modèle suivants sont disponibles pour les modèles de paquet Databricks. Pour plus d’informations sur l’utilisation de modèles et de variables Go, consultez modèles Go.

Aide Description
{{url}} Un alias pour https://pkg.go.dev/net/url#Parse. Cela permet l’utilisation de toutes les méthodes de url.URL.
{{regexp}} Un alias pour https://pkg.go.dev/regexp#Compile. Cela permet l’utilisation de toutes les méthodes de regexp.Regexp.
{{random_int}} Retourne, en tant qu’int, un nombre pseudo-aléatoire non négatif dans l’intervalle demi-ouvert (0,n).
{{uuid}} Renvoie, sous forme de chaîne, un UUID qui est un IDentifier unique unique universel 128 bits (16 octets) tel que défini dans RFC 4122.Cet ID est stable pendant la durée de l’exécution du modèle et peut être utilisé pour remplir le champ bundle.uuid dans databricks.yml par les auteurs de modèles.
{{bundle_uuid}} ID unique de l’offre groupée. Plusieurs appels de cette fonction retournent le même UUID.
{{pair}} Paire clé/valeur. C'est utilisé avec l'assistant map pour générer des cartes à utiliser à l'intérieur d'un modèle.
{{map}} Convertit une liste de paires en objet Map. Cela est utile pour passer plusieurs objets à des modèles définis dans le répertoire de bibliothèque. Étant donné que la syntaxe du modèle de texte Go pour appeler un modèle autorise uniquement la spécification d’un seul argument, cette fonction peut être utilisée pour contourner cette limitation.
Par exemple, dans la ligne suivante, on peut faire référence à {{template "my_template" (map (pair "foo" $arg1) (pair "bar" $arg2))}}, $arg1 et $arg2 depuis my_template sous les noms .foo et .bar.
{{smallest_node_type}} Retourne le plus petit type de nœud.
{{path_separator}} Caractère de séparation des chemins pour le système d’exploitation. Il s’agit de / pour les systèmes Unix et de \ pour Windows.
{{workspace_host}} L’URL de l’hôte de l’espace de travail auprès de laquelle l’utilisateur est actuellement authentifié.
{{user_name}} Nom complet de l’utilisateur initialisant le modèle.
{{short_name}} Nom court de l’utilisateur initialisant le modèle.
{{default_catalog}} Retourne le catalogue d’espaces de travail par défaut. S’il n’y a pas de valeur par défaut ou si le catalogue Unity n’est pas activé, cela retourne une chaîne vide.
{{is_service_principal}} Indique si l’utilisateur actuel est un principal de service ou non.
{{ skip <glob-pattern-relative-to-current-directory> }} Fait en sorte que le moteur de modèle ne génère pas tous les fichiers et répertoires qui correspondent au modèle Glob d’entrée. Pour obtenir un exemple, consultez le modèle mlops-stacks.

Assistants de modèles personnalisés

Pour définir vos propres helpers de modèle, créez un fichier de modèle dans le dossier library du projet de modèle et utilisez la syntaxe de création de modèles Go pour définir des helpers. Par exemple, le contenu suivant d’un fichier library/variables.tmpl définit les variables cli_version et model_name. Lorsque ce modèle est utilisé pour initialiser un bundle, la valeur de la variable model_name est construite à l’aide du champ input_project_name défini dans le fichier de schéma du modèle. La valeur de ce champ correspond à la saisie de l’utilisateur après une invite.

{{ define `cli_version` -}}
    v0.240.0
{{- end }}

{{ define `model_name` -}}
    {{ .input_project_name }}-model
{{- end }}

Pour voir un exemple complet, consultez le fichier des variables de modèle mlops-stacks .

Tester un modèle de pack

Enfin, veillez à tester votre modèle. Par exemple, utilisez l’interface CLI Databricks pour initialiser un nouveau bundle à l’aide du modèle défini dans les sections précédentes :

databricks bundle init basic-bundle-template

À l’invite What is your bundle project name?, tapez my_test_bundle.

Une fois le pack de test créé, le message de réussite du fichier de schéma est affiché. Si vous examinez le contenu du dossier my_test_bundle, vous voyez normalement ceci :

my_test_bundle
   ├── databricks.yml
   ├── resources
   │  └── my_test_bundle_job.yml
   └── src
      └── simple_notebook.ipynb

Le fichier et le travail databricks.yml sont désormais personnalisés :

# 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

Partager le modèle

Si vous souhaitez partager ce modèle de bundle avec d’autres personnes, vous pouvez le stocker dans la gestion de version avec n’importe quel fournisseur pris en charge par Git et auquel vos utilisateurs ont accès. Pour exécuter la commande bundle init avec une URL Git, assurez-vous que le fichier databricks_template_schema.json se trouve à l’emplacement racine par rapport à cette URL Git.

Conseil

Vous pouvez placer le fichier databricks_template_schema.json dans un autre dossier, par rapport à la racine du bundle. Dans la commande bundle init, vous pouvez ensuite utiliser l’option --template-dir pour référencer ce dossier, qui contient le fichier databricks_template_schema.json.

Étapes suivantes

  • Parcourez les modèles supplémentaires créés et gérés par Databricks. Consultez le référentiel d'exemples d'ensembles sur GitHub.
  • Pour utiliser les piles MLOps avec les modèles de packs de ressources Databricks, reportez-vous aux packs de ressources Databricks pour les piles MLOps.
  • En savoir plus sur le templating des packages Go. Consultez la documentation du Modèle de package Go.