Vytvoření vlastní šablony sady

V tomto kurzu vytvoříte vlastní šablonu pro vytváření deklarativních automatizačních balíčků, které spouští úlohu s úkolem v Pythonu v clusteru pomocí specifického obrazu Docker kontejneru.

Informace o vlastních šablonách balíčků naleznete v tématu vlastní šablony balíčků.

Požadavky

  • 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.

Definujte proměnné výzvy uživatele

Nejprve definujte databricks bundle init proměnné výzvy uživatele. Z příkazového řádku:

  1. Vytvořte prázdnou složku s názvem dab-container-template:

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

    cd dab-container-template
    touch databricks_template_schema.json
    
  3. Přidejte do databricks_template_schema.json souboru následující KÓD JSON, který definuje výzvu uživatele k zadání názvu projektu sady:

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

Vytvořte strukturu složek balíčku

Dále vytvořte template složku, která bude obsahovat strukturu složek pro vygenerované sady. Názvy podadresářů a souborů se řídí syntaxí šablony balíčku Go.

Tato šablona vytvoří složku balíčku projektu podle zadaného názvu projektu.

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

Teď vytvořte podadresáře resources a src pro soubory sady:

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

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

template/{{.project_name}} Ve složce vytvořte soubor s názvem databricks.yml.tmpl:

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

Přidejte následující kód YAML do databricks.yml.tmpl. Tento příklad používá pomocníky šablony svazku .

# 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 Lakeflow pipelines.
    mode: development
    default: true
    workspace:
      host: {{workspace_host}}

  # The 'prod' target, used for production deployment.
  prod:
    # For production deployments, there is only a single copy, so 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. Avoid /Shared, which is writable
    # by all workspace users.
    #
    # 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: /Workspace/Production/.bundle/${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ší soubor YAML pojmenovaný jako {{.project_name}}_job.yml.tmpl ve složce template/{{.project_name}}/resources. Tento nový soubor YAML obsahuje definici úlohy.

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

Do tohoto souboru přidejte následující YAML, který popisuje úlohu šablony, která obsahuje úlohu Pythonu, která se má spustit v clusteru úloh pomocí konkrétní image kontejneru Dockeru. V tomto příkladu se používá výchozí základní image kontejneru Dockeru Databricks, ale místo toho můžete zadat vlastní image.

# 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

Přidejte soubory odkazované v konfiguraci

Dále vytvořte soubor úloh Pythonu odkazovaný úlohou v šabloně:

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

Nyní přidejte následující do task.py:

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

Ověření struktury šablony balíčku

Zkontrolujte strukturu složek projektu šablony balíčku. Měl by vypadat takto:

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

Otestování šablony

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

databricks bundle init dab-container-template

Další kroky

Prostředky

  • Úložiště příkladů Bundle na GitHubu