Sdílet prostřednictvím


Kurz: Vytvoření první vlastní šablony sady prostředků Databricks

V tomto kurzu vytvoříte vlastní šablonu sady prostředků Databricks pro vytváření sad, které spouští úlohu s konkrétní úlohou Pythonu v clusteru pomocí konkrétní image kontejneru Dockeru.

Než začnete

Nainstalujte rozhraní příkazového řádku Databricks verze 0.218.0 nebo novější. Pokud jste ji už nainstalovali, ověřte, že je verze 0.218.0 nebo vyšší, a to spuštěním databricks -version z příkazového řádku.

Definování proměnných výzvy uživatele

Prvním krokem při vytvoření šablony sady je definování databricks bundle init proměnných výzvy uživatele. Z příkazového řádku:

  1. Vytvořte prázdný adresář s názvem dab-container-template:

    mkdir dab-container-template
    
  2. V kořenovém adresáři vytvořte soubor s názvem databricks_template_schema.json:

    cd dab-container-template
    touch databricks_template_schema.json
    
  3. Do souboru přidejte následující obsah databricks_template_schema.json a uložte ho. Každá proměnná se během vytváření sady přeloží na výzvu uživatele.

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

Vytvoření struktury složek sady prostředků

Dále v adresáři šablony vytvořte podadresáře pojmenované resources a src. Složka template obsahuje adresářovou strukturu pro vygenerované sady. Názvy podadresářů a souborů budou při odvození z uživatelských hodnot následovat za syntaxí šablony balíčku Go.

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

Přidání konfiguračních šablon YAML

template V adresáři vytvořte soubor s názvem databricks.yml.tmpl a přidejte následující 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 -}}

Vytvořte další pojmenovaný {{.project_name}}_job.yml.tmpl soubor YAML a umístěte ho template/resources do adresáře. Tento nový soubor YAML rozdělí definice úlohy projektu ze zbytku definice sady. Do tohoto souboru přidejte následující YAML, který popisuje úlohu šablony, která obsahuje konkrétní úlohu Pythonu, která se má spustit v clusteru úloh pomocí konkrétní image kontejneru Dockeru:

  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

V tomto příkladu použijete výchozí základní image kontejneru Dockeru Databricks, ale místo toho můžete zadat vlastní image.

Přidání souborů odkazovaných v konfiguraci

Dále vytvořte template/src/{{.project_name}} adresář a vytvořte soubor úloh Pythonu odkazovaný úlohou v šabloně:

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

Nyní přidejte následující položky:task.py

  import pyspark
  from pyspark.sql import SparkSession

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

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

Ověření struktury šablony sady

Zkontrolujte strukturu složek projektu šablony sady. Měl by vypadat takto:

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

Otestování šablony

Nakonec otestujte šablonu sady. Pokud chcete vygenerovat sadu založenou na nové vlastní šabloně, použijte databricks bundle init příkaz a zadejte nové umístění šablony. Z kořenové složky projektů sady:

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

Další kroky

Zdroje informací