Delen via


Zelfstudie: Uw eerste aangepaste Databricks Asset Bundle-sjabloon maken

In deze handleiding maakt u een aangepaste Databricks Asset Bundle-sjabloon voor het maken van bundels die een specifieke Python-taak uitvoeren op een cluster met een specifieke Docker-containerimage.

Zie Aangepaste bundelsjablonenvoor meer informatie over aangepaste bundelsjablonen.

Voordat u begint

Installeer de Databricks CLI versie 0.218.0 of hoger. Als u deze al hebt geïnstalleerd, controleert u of de versie 0.218.0 of hoger is door databricks -version uit te voeren vanaf de opdrachtregel.

Gebruikerspromptvariabelen definiëren

De eerste stap bij het ontwikkelen van een bundelsjabloon is het definiëren van de databricks bundle init gebruikerspromptvariabelen. Vanaf de opdrachtregel:

  1. Maak een lege map met de naam dab-container-template:

    mkdir dab-container-template
    
  2. Maak in de hoofdmap een bestand met de naam databricks_template_schema.json:

    cd dab-container-template
    touch databricks_template_schema.json
    
  3. Voeg de volgende inhoud toe aan het databricks_template_schema.json en sla het bestand op. Elke variabele wordt vertaald naar een gebruikersprompt tijdens het maken van de bundel.

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

De structuur van de bundelmap maken

Maak vervolgens in de sjabloonmap submappen met de naam resources en src. De map template bevat de mapstructuur voor de gegenereerde bundels. De namen van de submappen en bestanden volgen de syntaxis van de Go-pakketsjabloon wanneer ze zijn afgeleid van gebruikerswaarden.

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

YAML-configuratiesjablonen toevoegen

Maak in de map template een bestand met de naam databricks.yml.tmpl en voeg de volgende YAML toe. In dit voorbeeld worden helpers voor bundelsjablonengebruikt.

  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 DLT 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 -}}

Maak een ander YAML-bestand met de naam {{.project_name}}_job.yml.tmpl en plaats het in de map template/resources. Met dit nieuwe YAML-bestand worden de projecttaakdefinities gesplitst van de rest van de definitie van de bundel. Voeg de volgende YAML toe aan dit bestand om de template job te beschrijven, die een specifieke Python-taak bevat die moet worden uitgevoerd op een jobcluster met behulp van een specifieke Docker-containerimage.

  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 dit voorbeeld gebruikt u een basis Docker-containerimage van Databricks, maar u kunt ook uw eigen aangepaste image opgeven.

Bestanden toevoegen waarnaar wordt verwezen in uw configuratie

Maak vervolgens een template/src/{{.project_name}} map en maak het Python-taakbestand waarnaar wordt verwezen door de taak in de sjabloon:

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

Voeg nu het volgende toe aan task.py:

  import pyspark
  from pyspark.sql import SparkSession

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

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

De structuur van de bundelsjabloon controleren

Controleer de mapstructuur van uw bundelsjabloonproject. Dit moet er als volgt uitzien:

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

Uw sjabloon testen

Test ten slotte uw bundelsjabloon. Als u een bundel wilt genereren op basis van uw nieuwe aangepaste sjabloon, gebruikt u de opdracht databricks bundle init en geeft u de nieuwe sjabloonlocatie op. Vanuit de hoofdmap van uw bundelprojecten:

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

Volgende stappen

Middelen