メインコンテンツまでスキップ

チュートリアル: 初めてのカスタム Databricks アセット バンドル テンプレートを作成する

このチュートリアルでは、特定のDatabricks Pythonコンテナイメージを使用して、クラスター上の特定の タスクを持つジョブを実行するバンドルを作成するためのカスタム Docker アセットバンドルテンプレートを作成します。

カスタムバンドルテンプレートに関する情報については、「 カスタムバンドルテンプレート」を参照してください。

注記

カスタム Docker コンテナ イメージは Google Cloud ではサポートされていません。

始める前に

Databricks CLI バージョン 0.218.0 以降をインストールします。既にインストールしている場合は、コマンド ラインから databricks -version を実行して、バージョンが 0.218.0 以降であることを確認します。

ユーザープロンプト変数の定義

バンドル・テンプレートを作成する最初のステップは、 databricks bundle init ユーザー・プロンプト変数を定義することです。コマンドラインから:

  1. dab-container-templateという名前の空のディレクトリを作成します。

    sh
    mkdir dab-container-template
  2. ディレクトリのルートに、次の名前のファイルを作成しますdatabricks_template_schema.json

    sh
    cd dab-container-template
    touch databricks_template_schema.json
  3. 次の内容を databricks_template_schema.json に追加し、ファイルを保存します。各変数は、バンドルの作成時にユーザープロンプトに変換されます。

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

バンドルフォルダ構造を作成する

次に、テンプレートディレクトリに、 resourcessrcという名前のサブディレクトリを作成します。template フォルダには、生成されたバンドルのディレクトリ構造が含まれています。サブディレクトリとファイルの名前は、ユーザー値から派生する場合、Go パッケージ テンプレート構文に従います。

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

YAML 構成テンプレートを追加する

template ディレクトリに databricks.yml.tmpl という名前のファイルを作成し、次の YAML を追加します。この例では 、バンドル テンプレート ヘルパーを使用します。

sh
  touch template/databricks.yml.tmpl
YAML
  # 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 DLT 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 -}}

{{.project_name}}_job.yml.tmplという名前の別のYAMLファイルを作成し、template/resourcesディレクトリに配置します。この新しい YAML ファイルは、プロジェクトジョブ定義をバンドルの定義の残りの部分から分割します。 このファイルに次の YAML を追加して、特定のPython Dockerコンテナー イメージを使用してジョブ クラスターで実行する特定の タスクを含むテンプレート ジョブについて説明します。

sh
  touch template/resources/{{.project_name}}_job.yml.tmpl
YAML
  # 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

この例では、デフォルト Databricks ベース Docker コンテナ イメージを使用しますが、代わりに独自のカスタム イメージを指定できます。

構成で参照されているファイルを追加する

次に、template/src/{{.project_name}}ディレクトリを作成し、テンプレート内のジョブによって参照される Python タスクファイルを作成します。

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

次に、以下を追加しますtask.py

Python
  import pyspark
from pyspark.sql import SparkSession

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

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

バンドル・テンプレートの構造の確認

バンドルテンプレートプロジェクトのフォルダ構造を確認します。次のようになります。

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

テンプレートをテストする

最後に、バンドルテンプレートをテストします。新しいカスタムテンプレートに基づいてバンドルを生成するには、 databricks bundle init コマンドを使用して、新しいテンプレートの場所を指定します。バンドルプロジェクトのルートフォルダから:

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

次のステップ

リソース