Condividi tramite


Esercitazione: Creare il primo modello di bundle di asset di Databricks personalizzato

In questa esercitazione si creerà un modello di bundle di asset di Databricks personalizzato per la creazione di bundle che eseguono un processo con un'attività Python specifica in un cluster usando un'immagine del contenitore Docker specifica.

Prima di iniziare

Installare l'interfaccia della riga di comando di Databricks versione 0.218.0 o successiva. Se è già stato installato, verificare che la versione sia 0.218.0 o successiva eseguendo databricks -version dalla riga di comando.

Definire le variabili di richiesta utente

Il primo passaggio per la compilazione di un modello di bundle consiste nel definire le variabili di richiesta dell'utente databricks bundle init. Dalla riga di comando:

  1. Creare una directory vuota denominata dab-container-template:

    mkdir dab-container-template
    
  2. Creare un nuovo file nella directory denominato databricks_template_schema.json:

    cd dab-container-template
    touch databricks_template_schema.json
    
  3. Aggiungere il contenuto seguente al databricks_template_schema.json e salvare il file. Ogni variabile verrà convertita in una richiesta dell'utente durante la creazione del bundle.

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

Creare la struttura di cartelle del bundle

Successivamente, nella directory del modello creare sottodirectory denominate resources e src. La cartella template contiene la struttura di directory per i bundle generati. I nomi delle sottodirectory e dei file seguiranno la sintassi del modello di pacchetto Go quando deriva dai valori utente.

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

Aggiungere modelli di configurazione YAML

Nella directory template, creare un file denominato databricks.yml.tmpl e aggiungere il seguente 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 -}}

Creare un altro file YAML denominato {{.project_name}}_job.yml.tmpl e inserirlo nella directory template/resources. Questo nuovo file YAML suddivide le definizioni del processo di progetto dal resto della definizione del bundle. Aggiungere il codice YAML seguente a questo file per descrivere il processo modello, che contiene un'attività Python specifica da eseguire in un cluster di processo usando un'immagine del contenitore Docker specifica:

  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 questo esempio si usa un'immagine del contenitore Docker di base di Databricks predefinita, ma è possibile specificare invece un'immagine personalizzata.

Aggiungere file a cui si fa riferimento nella configurazione

Creare quindi una directory template/src/{{.project_name}} e creare il file di attività Python a cui fa riferimento il processo nel modello:

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

Aggiungere quanto segue a task.py:

  import pyspark
  from pyspark.sql import SparkSession

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

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

Verificare la struttura del modello di bundle

Esaminare la struttura di cartelle del progetto modello di bundle. La cartella dovrebbe avere un aspetto simile a questo:

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

Testare il modello

Infine, testare il modello di bundle. Per generare un bundle basato sul nuovo modello personalizzato, usare il comando databricks bundle init specificando il nuovo percorso del modello. Dalla cartella radice dei progetti bundle:

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

Passaggi successivi

Risorse