Dela via


Självstudie: Skapa din första anpassade Databricks-mall för tillgångspaket

I den här självstudien skapar du en anpassad Databricks Asset Bundle-mall för att skapa paket som kör ett jobb med en specifik Python-uppgift i ett kluster med en specifik Docker-containeravbildning.

Innan du börjar

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

Det första steget i att skapa en paketmall är att definiera variablerna för databricks bundle init användarprompten. Från kommandoraden:

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

    mkdir dab-container-template
    
  2. I katalogens 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 innehåll i databricks_template_schema.json och spara filen. Varje variabel översätts till en användarprompt när paketet skapas.

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

Skapa paketmappstrukturen

I mallkatalogen skapar du sedan underkataloger med namnet resources och src. Mappen template innehåller katalogstrukturen för dina genererade paket. Namnen på underkatalogerna och filerna följer Go-paketmallssyntaxen när de härleds från användarvärden.

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

Lägga till YAML-konfigurationsmallar

I katalogen template skapar du en fil med namnet databricks.yml.tmpl och lägger till följande YAML:

  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 Delta Live Tables 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 -}}

Skapa en annan YAML-fil med namnet {{.project_name}}_job.yml.tmpl och placera den template/resources i katalogen. Den här nya YAML-filen delar upp projektjobbsdefinitionerna från resten av paketets definition. Lägg till följande YAML i den här filen för att beskriva malljobbet, som innehåller en specifik Python-uppgift som ska köras på ett jobbkluster med en specifik Docker-containeravbildning:

  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

I det här exemplet använder du en standard dockercontaineravbildning för Databricks-bas, men du kan ange en egen anpassad avbildning i stället.

Lägg till filer som refereras i konfigurationen

Skapa sedan en template/src/{{.project_name}} katalog och skapa python-aktivitetsfilen som refereras av jobbet i mallen:

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

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

  import pyspark
  from pyspark.sql import SparkSession

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

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

Verifiera mallstrukturen för paket

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

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

Testa mallen

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

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

Nästa steg

Resurser