チュートリアル: 最初のカスタム Databricks アセットバンドルテンプレートを作成する
このチュートリアルでは、特定の Docker コンテナー イメージを使用してクラスター上で特定の Python タスクを含むジョブを実行するバンドルを作成するためのカスタム Databricks アセット バンドル テンプレートを作成します。
注:
カスタム コンテナ イメージ Docker Google クラウドではサポートされていません。
はじめに
Databricks CLIバージョン 0.218.0 以降をインストールします。 すでにインストールされている場合は、コマンド ラインからdatabricks -version
を実行して、バージョンが 0.218.0 以上であることを確認してください。
ユーザー・プロンプト変数の定義
バンドル テンプレートを構築する最初のステップは、 databricks bundle init
ユーザー プロンプト変数を定義することです。 コマンドラインから:
dab-container-template
という名前の空のディレクトリを作成します。mkdir dab-container-template
ディレクトリのルートに、
databricks_template_schema.json
という名前のファイルを作成します。cd dab-container-template touch databricks_template_schema.json
次の内容を
databricks_template_schema.json
に追加し、ファイルを保存します。 各変数は、バンドルの作成時にユーザープロンプトに変換されます。{ "properties": { "project_name": { "type": "string", "default": "project_name", "description": "Project name", "order": 1 } } }
バンドルフォルダ構造の作成
次に、テンプレートディレクトリに、 resources
と src
という名前のサブディレクトリを作成します。 template
フォルダには、生成されたバンドルのディレクトリ構造が含まれています。サブディレクトリとファイルの名前は、ユーザー値から派生する場合、Go パッケージ テンプレートの構文に従います。
mkdir -p "template/resources"
mkdir -p "template/src"
YAML 構成テンプレートを追加する
template
ディレクトリに databricks.yml.tmpl
という名前のファイルを作成し、次の 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
# /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 をこのファイルに追加して、特定の Docker コンテナー イメージを使用してジョブ クラスター上で実行する特定の Python タスクを含むテンプレート ジョブを記述します。
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
この例では、デフォルトの Databricks ベース Docker コンテナー イメージを使用しますが、代わりに独自のカスタム イメージを指定できます。
構成で参照されるファイルを追加する
次に、 template/src/{{.project_name}}
ディレクトリを作成し、テンプレート内のジョブによって参照される Python タスク ファイルを作成します。
mkdir -p template/src/{{.project_name}}
touch template/src/{{.project_name}}/task.py
次に、 task.py
に以下を追加します。
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
コマンドを使用して、新しいテンプレートの場所を指定します。 バンドルプロジェクトのルートフォルダから:
mkdir my-new-container-bundle
cd my-new-container-bundle
databricks bundle init dab-container-template
次のステップ
ノートブックを Databricks ワークスペースにデプロイし、デプロイされたノートブックを Databricks ジョブとして実行するバンドルを作成します。 「Databricks アセット バンドルを使用して Databricks でジョブを開発する」を参照してください。
ノートブックを Databricks ワークスペースにデプロイし、そのデプロイされたノートブックを Delta Live Tables パイプラインとして実行するバンドルを作成します。 「Databricks Asset Bundles を使用して Delta Live Tables パイプラインを開発する」を参照してください。
MLOpsスタックをデプロイして実行するバンドルを作成します。 「 MLOps スタックの Databricks アセット バンドル」を参照してください。
GitHub の CI/CD (継続的インテグレーション/継続的デプロイメント) ワークフローにバンドルを追加します。 「Databricks Asset Bundle と GitHub Actions を使用して CI/CD ワークフローを実行する」を参照してください。