次の方法で共有


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

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

開始する前に

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

ユーザー プロンプト変数を定義する

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

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

    mkdir dab-container-template
    
  2. ディレクトリのルートで、databricks_template_schema.json という名前のファイルを作成します。

    cd dab-container-template
    touch databricks_template_schema.json
    
  3. 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
      # /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 を追加してテンプレート ジョブを記述します。これには、特定の 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

次のステップ

リソース