Skapa en anpassad paketmall

I den här handledningen skapar du en anpassad mall för att skapa Declarative Automation Bundles som kör ett jobb med en Python-uppgift i ett kluster med en specifik Docker-container-avbildning.

Information om anpassade paketmallar finns i Anpassade paketmallar.

Krav

  • Installera Databricks CLI version 0.218.0 eller senare. Om du redan har installerat den kontrollerar du att versionen är 0.218.0 eller senare genom att köra databricks -version från kommandoraden.

Definiera variabler för användarprompt

Definiera först variablerna för databricks bundle init användarprompten. Från kommandoraden:

  1. Skapa en tom mapp med namnet dab-container-template:

    mkdir dab-container-template
    
  2. I mappens rot skapar du en fil med namnet databricks_template_schema.json:

    cd dab-container-template
    touch databricks_template_schema.json
    
  3. Lägg till följande JSON i databricks_template_schema.json filen för att definiera en användarprompt för paketprojektets namn:

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

Skapa paketmappstrukturen

Skapa sedan en template mapp som ska innehålla mappstrukturen för dina genererade paket. Namnen på underkatalogerna och filerna följer Go-paketmallssyntaxen.

Den här mallen skapar paketprojektmappen baserat på projektnamnsprompten:

mkdir -p "template/{{.project_name}}"

Skapa nu underkatalogerna resources och src för paketfiler:

mkdir -p "template/{{.project_name}}/resources"
mkdir -p "template/{{.project_name}}/src"

Lägga till YAML-konfigurationsmallar

template/{{.project_name}} I mappen skapar du en fil med namnet databricks.yml.tmpl:

touch template/{{.project_name}}/databricks.yml.tmpl

Lägg till följande YAML i databricks.yml.tmpl. I det här exemplet används mallhjälpare för paket.

# 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 :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 -}}

Skapa en annan YAML-fil med namnet {{.project_name}}_job.yml.tmpl i template/{{.project_name}}/resources mappen. Den här nya YAML-filen innehåller jobbdefinitionen.

touch template/{{.project_name}}/resources/{{.project_name}}_job.yml.tmpl

Lägg till följande YAML i den här filen för att beskriva malljobbet, som innehåller en Python-uppgift som ska köras i ett jobbkluster med en specifik Docker-containeravbildning. I det här exemplet används en standard avbildning av Docker-containern för Databricks-bas, men du kan ange en egen anpassad avbildning i stället.

# 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

Lägg till filer som refereras i konfigurationen

Skapa sedan Python-aktivitetsfilen som refereras av jobbet i mallen:

touch template/{{.project_name}}/src/task.py

Lägg nu till följande i task.py:

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

Verifiera mallstrukturen för paket

Granska mappstrukturen för ditt paketmallsprojekt. Det bör se ut så här:

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

Testa mallen

Till sist, testa din paketmall. Om du vill generera ett paket baserat på din nya anpassade mall använder du kommandot databricks bundle init och anger den nya mallplatsen. Från rotmappen för paketprojekt:

databricks bundle init dab-container-template

Nästa steg

Resurser