Freigeben über


Erstellen einer benutzerdefinierten Databricks Asset Bundle-Vorlage

In dieser Anleitung erstellen Sie eine benutzerdefinierte Vorlage für Databricks Asset Bundles, um Bündel zu erstellen, die einen Auftrag mit einer spezifischen Python-Aufgabe auf einem Cluster unter Verwendung eines speziellen Docker-Containerimages ausführen.

Informationen zu benutzerdefinierten Bündelvorlagen finden Sie unter Benutzerdefinierte Bündelvorlagen.

Anforderungen

  • Installieren Sie die Databricks CLI-Version 0.218.0 oder höher. Wenn Sie es bereits installiert haben, bestätigen Sie, dass die Version 0.218.0 oder höher ist, indem Sie über die Befehlszeile ausführen databricks -version .

Definieren von Benutzeraufforderungsvariablen

Der erste Schritt beim Erstellen einer Bundle-Vorlage besteht darin, die databricks bundle init Benutzeraufforderungsvariablen zu definieren. Über die Befehlszeile:

  1. Erstellen Sie ein leeres Verzeichnis mit dem Namen dab-container-template:

    mkdir dab-container-template
    
  2. Erstellen Sie im Stammverzeichnis eine Datei mit dem Namen databricks_template_schema.json:

    cd dab-container-template
    touch databricks_template_schema.json
    
  3. Fügen Sie der Datei den folgenden Inhalt hinzu databricks_template_schema.json , und speichern Sie sie. Jede Variable wird während der Bündelerstellung in eine Benutzeraufforderung übersetzt.

    {
      "properties": {
        "project_name": {
          "type": "string",
          "default": "project_name",
          "description": "Project name",
          "order": 1
        }
      }
    }
    

Erstellen der Paketordnerstruktur

Erstellen Sie als Nächstes im Vorlagenverzeichnis Unterverzeichnisse namens resources und src. Der template Ordner enthält die Verzeichnisstruktur für die generierten Bundles. Die Namen der Unterverzeichnisse und Dateien folgen der Go-Paketvorlagensyntax, wenn sie von Benutzerwerten abgeleitet wird.

  mkdir -p "template/resources"
  mkdir -p "template/src"

Hinzufügen von YAML-Konfigurationsvorlagen

Erstellen Sie im template Verzeichnis eine Datei mit dem Namen databricks.yml.tmpl , und fügen Sie den folgenden YAML hinzu. In diesem Beispiel werden Bündelvorlagenhilfsprogramme verwendet.

  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 :re[LDP].
      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 -}}

Erstellen Sie eine weitere YAML-Datei namens {{.project_name}}_job.yml.tmpl , und platzieren Sie sie im template/resources Verzeichnis. Diese neue YAML-Datei trennt die Projektaufgabendefinitionen von der übrigen Definition des Bundles ab. Fügen Sie dieser Datei den folgenden YAML hinzu, um den Vorlagenauftrag zu beschreiben, der eine bestimmte Python-Aufgabe enthält, die mit einem bestimmten Docker-Containerimage auf einem Auftragscluster ausgeführt werden soll:

  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

In diesem Beispiel verwenden Sie ein standardmäßiges Databricks-Basis-Docker-Containerimage, aber Sie können stattdessen Ihr eigenes benutzerdefiniertes Image angeben.

Hinzufügen von Dateien, auf die in Ihrer Konfiguration verwiesen wird

Erstellen Sie als Nächstes ein template/src/{{.project_name}} Verzeichnis, und erstellen Sie die Python-Aufgabendatei, auf die der Auftrag in der Vorlage verweist:

  mkdir -p template/src/{{.project_name}}
  touch template/src/{{.project_name}}/task.py

Fügen Sie nun Folgendes hinzu:task.py

  import pyspark
  from pyspark.sql import SparkSession

  spark = SparkSession.builder.master('local[*]').appName('example').getOrCreate()

  print(f'Spark version{spark.version}')

Überprüfen Sie die Struktur der Bündelvorlage

Überprüfen Sie die Ordnerstruktur Ihres Bundlevorlagenprojekts. Es sollte wie folgt aussehen:

  .
  ├── databricks_template_schema.json
  └── template
      ├── databricks.yml.tmpl
      ├── resources
      │   └── {{.project_name}}_job.yml.tmpl
      └── src
          └── {{.project_name}}
              └── task.py

Testen der Vorlage

Testen Sie abschließend Ihre Paketvorlage. Um ein Bündel basierend auf Ihrer neuen benutzerdefinierten Vorlage zu generieren, verwenden Sie den databricks bundle init Befehl, und geben Sie den neuen Vorlagenspeicherort an. Verwenden Sie den Stammordner Ihres Paketprojekts wie folgt:

mkdir my-new-container-bundle
cd my-new-container-bundle
databricks bundle init dab-container-template

Nächste Schritte

Ressourcen