バンドルを手動で作成する
このチュートリアルでは、Databricks アセット バンドルを最初から作成します。 この単純なバンドルは、2 つのノートブックと、これらのノートブックを実行するための Databricks ジョブの定義で構成されています。 その後、Databricks ワークスペースでジョブを検証、デプロイ、実行します。 これらの手順により、「 Databricks ジョブを使用して最初のワークフローを作成する」というタイトルのクイックスタートが自動化されます。
必要条件
- Databricks CLI バージョン 0.218.0 以降。 インストールされている Databricks CLI のバージョンを確認するには、コマンド
databricks -v
を実行します。 Databricks CLI をインストールするには、「 Databricks CLI のインストールまたは更新」を参照してください。 - Databricks CLI 用に構成された認証。 「Databricks CLI の認証」を参照してください。
- リモート Databricks ワークスペースでは、ワークスペース ファイルが有効になっている必要があります。 「ワークスペースファイルとは」を参照してください。
ステップ 1: バンドルを作成する
バンドルには、デプロイするアーティファクトと、実行するリソースの設定が含まれています。
- 開発マシンに空のディレクトリを作成するか、指定してください。
- ターミナルの空のディレクトリに切り替えるか、IDEで開きます。
Git プロバイダーからクローンされたリポジトリを含むディレクトリを使用することもできます。 これにより、外部バージョン管理を使用してバンドルを管理し、プロジェクトで他の開発者や IT プロフェッショナルとより簡単に共同作業を行うことができます。
このデモの リポジトリを複製することを選択した場合、Databricks では、リポジトリを空にするか、 README
や .gitignore
などの基本的なファイルのみを含めることをお勧めします。 そうしないと、リポジトリ内の既存のファイルが Databricks ワークスペースに不必要に同期される可能性があります。
ステップ 2: ノートブックをプロジェクトに追加する
この手順では、プロジェクトに 2 つのノートブックを追加します。 最初のノートブックは、ニューヨーク州保健局の公開データソースから、2007年以降のトレンドの赤ちゃんの名前のリストを取得しています。 部門のウェブサイトで赤ちゃん の名前:名前によるトレンド:2007年以降 を参照してください。 次に、最初のノートブックは、このデータを my-volume
という名前の Databricks Unity Catalog ボリュームに保存します。main
という名前のカタログ内の SAP という名前のスキーマdefault
。 2 番目のノートブックは、保存されたデータをクエリし、2014 年の赤ちゃんの名前の集計数をファーストネームと性別別に表示します。
-
ディレクトリのルートから、最初のノートブック (
retrieve-baby-names.py
という名前のファイル) を作成します。 -
retrieve-baby-names.py
ファイルに次のコードを追加してください。Python# Databricks notebook source
import requests
response = requests.get('http://health.data.ny.gov/api/views/jxy9-yhdk/rows.csv')
csvfile = response.content.decode('utf-8')
dbutils.fs.put("/Volumes/main/default/my-volume/babynames.csv", csvfile, True) -
同じディレクトリに 2 つ目のノートブック (
filter-baby-names.py
という名前のファイル) を作成します。 -
filter-baby-names.py
ファイルに次のコードを追加してください。Python# Databricks notebook source
babynames = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("/Volumes/main/default/my-volume/babynames.csv")
babynames.createOrReplaceTempView("babynames_table")
years = spark.sql("select distinct(Year) from babynames_table").toPandas()['Year'].tolist()
years.sort()
dbutils.widgets.dropdown("year", "2014", [str(x) for x in years])
display(babynames.filter(babynames.Year == dbutils.widgets.get("year")))
ステップ3:バンドル設定スキーマファイルをプロジェクトに追加する
YAML ファイルと JSON スキーマ ファイルをサポートする Visual Studio Code、PyCharm Professional、IntelliJ IDEA Ultimate などの IDE を使用している場合は、IDE を使用してバンドル構成スキーマ ファイルを作成するだけでなく、プロジェクトのバンドル構成ファイルの構文と書式設定を確認できます。 ステップ 5 の後半で作成するバンドル設定ファイルは YAML ベースですが、このステップのバンドル設定ファイルは JSON ベースです。
- Visual Studio Code
- PyCharm Professional
- IntelliJ IDEA Ultimate
-
Add YAML language server support to Visual Studio Code, for example by installing the YAML extension from the Visual Studio Code Marketplace.
-
Generate the Databricks Asset Bundle configuration JSON schema file by using the Databricks CLI to run the
bundle schema
command and redirect the output to a JSON file. For example, generate a file namedbundle_config_schema.json
in the current directory, as follows:Bashdatabricks bundle schema > bundle_config_schema.json
-
In Step 5 you will add the following comment to the beginning of your bundle configuration file, which associates your bundle configuration file with the specified JSON schema file:
YAML# yaml-language-server: $schema=bundle_config_schema.json
In the preceding comment, if your Databricks Asset Bundle configuration JSON schema file is in a different path, replace bundle_config_schema.json
with the full path to your schema file.
-
Generate the Databricks Asset Bundle configuration JSON schema file using the Databricks CLI to run the
bundle schema
command and redirect the output to a JSON file. For example, generate a file namedbundle_config_schema.json
in the current directory, as follows:Bashdatabricks bundle schema > bundle_config_schema.json
-
Configure PyCharm to recognize the bundle configuration JSON schema file, and then complete the JSON schema mapping, by following the instructions in Configure a custom JSON schema.
-
In Step 5 you will use PyCharm to create or open a bundle configuration file. By convention, this file is named
databricks.yml
.
-
Generate the Databricks Asset Bundle configuration JSON schema file by using the Databricks CLI to run the
bundle schema
command and redirect the output to a JSON file. For example, generate a file namedbundle_config_schema.json
in the current directory, as follows:Bashdatabricks bundle schema > bundle_config_schema.json
-
Configure IntelliJ IDEA to recognize the bundle configuration JSON schema file, and then complete the JSON schema mapping, by following the instructions in Configure a custom JSON schema.
-
In Step 5 you will use IntelliJ IDEA to create or open a bundle configuration file. By convention, this file is named
databricks.yml
.
ステップ 4: 認証を設定する
この手順では、開発用マシン上の Databricks CLI と Databricks ワークスペースの間の認証を設定します。 この記事では、OAuth ユーザーマシン (U2M) 認証と、認証に DEFAULT
という名前の対応する Databricks 構成プロファイルを使用することを前提としています。
U2M認証は、これらの手順をリアルタイムで試すのに適しています。 完全に自動化されたワークフローの場合、Databricks では、代わりに OAuth マシン間 (M2M) 認証を使用することをお勧めします。 「認証」のM2M認証の設定手順を参照してください。
-
Databricks CLI を使用して、ターゲット ワークスペースごとに次のコマンドを実行して、OAuth トークン管理をローカルで開始します。
次のコマンドで、
<workspace-url>
を Databricks ワークスペース インスタンスの URL に置き換えます (例:https://dbc-a1b2345c-d6e7.cloud.databricks.com
.Bashdatabricks auth login --host <workspace-url>
-
Databricks CLI では、入力した情報を Databricks 構成プロファイルとして保存するように求められます。
Enter
キーを押して提案されたプロファイル名を受け入れるか、新規または既存のプロファイルの名前を入力します。同じ名前の既存のプロファイルは、入力した情報で上書きされます。 プロファイルを使用すると、複数のワークスペース間で認証コンテキストをすばやく切り替えることができます。既存のプロファイルのリストを取得するには、別のターミナルまたはコマンドプロンプトでDatabricks CLIを使用してコマンド
databricks auth profiles
を実行します。特定のプロファイルの既存の設定を表示するには、コマンドdatabricks auth env --profile <profile-name>
を実行します。 -
Webブラウザで、画面の指示に従ってDatabricksワークスペースにログインします。
-
以下のいずれかのコマンドを実行して、プロファイルの現在のOAuthトークンの値とトークンの今後の有効期限のタイムスタンプを表示します。
databricks auth token --host <workspace-url>
databricks auth token -p <profile-name>
databricks auth token --host <workspace-url> -p <profile-name>
同じ
--host
値を持つプロファイルが複数ある場合、Databricks CLIが正しいOAuthトークン情報を見つけられるように--host
と-p
オプションを一緒に指定する必要がある場合があります。
ステップ 5: バンドル設定ファイルをプロジェクトに追加する
この手順では、2 つのノートブックをデプロイして実行する方法を定義します。 このデモでは、Databricks ジョブを使用して最初のノートブックを実行し、次に 2 番目のノートブックを実行します。 最初のノートブックがデータを保存し、2 番目のノートブックが保存されたデータをクエリするため、2 番目のノートブックが開始する前に最初のノートブックの実行を完了する必要があります。 これらの目標は、プロジェクトのバンドル設定ファイルでモデル化します。
- ディレクトリのルートから、
databricks.yml
という名前のバンドル設定ファイルを作成します。 - 次のコードを
databricks.yml
ファイルに追加し、<workspace-url>
を ワークスペースの URL に置き換えます (例:https://dbc-a1b2345c-d6e7.cloud.databricks.com
)。 この URL は、.databrickscfg
ファイル内の URL と一致する必要があります。
最初の行は # yaml-language-server
で始まるもので、IDE がサポートしている場合にのみ必要です。 詳細については、前のステップ 3 を参照してください。
# yaml-language-server: $schema=bundle_config_schema.json
bundle:
name: baby-names
resources:
jobs:
retrieve-filter-baby-names-job:
name: retrieve-filter-baby-names-job
job_clusters:
- job_cluster_key: common-cluster
new_cluster:
spark_version: 12.2.x-scala2.12
node_type_id: i3.xlarge
num_workers: 1
tasks:
- task_key: retrieve-baby-names-task
job_cluster_key: common-cluster
notebook_task:
notebook_path: ./retrieve-baby-names.py
- task_key: filter-baby-names-task
depends_on:
- task_key: retrieve-baby-names-task
job_cluster_key: common-cluster
notebook_task:
notebook_path: ./filter-baby-names.py
targets:
development:
workspace:
host: <workspace-url>
ジョブをカスタマイズする場合、ジョブ宣言のマッピングは、 リファレンスのPOST /api/2.1/job/create に記載されているように、ジョブ作成操作のリクエストペイロード (YAML 形式で表される)RESTAPI に対応します。
バンドル内の新しいジョブ クラスターの設定を定義、結合、およびオーバーライドするには、「Databricks アセット バンドルでのクラスター設定のオーバーライド」で説明されている手法を使用します。
ステップ6: プロジェクトのバンドル設定ファイルを検証します
この手順では、バンドル構成が有効かどうかを確認します。
-
Databricks CLI を使用して、次のように
bundle validate
コマンドを実行します。Bashdatabricks bundle validate
-
バンドル構成のサマリーが返された場合、検証は成功しています。 エラーが返された場合は、エラーを修正し、この手順を繰り返します。
この手順の後にバンドルに変更を加えた場合は、この手順を繰り返して、バンドル構成がまだ有効かどうかを確認する必要があります。
手順 7: ローカル プロジェクトをリモート ワークスペースにデプロイする
この手順では、2 つのローカル ノートブックをリモート Databricks ワークスペースにデプロイし、ワークスペースに Databricks ジョブを作成します。
-
Databricks CLI を使用して、次のように
bundle deploy
コマンドを実行します。Bashdatabricks bundle deploy -t development
-
2つのローカルノートブックがデプロイされたかどうかを確認する: Databricks ワークスペースのサイドバーで、[ ワークスペース ]をクリックします。
-
「Users 」>
<your-username>
> > baby-names > development > files フォルダをクリックします。2 つのノートブックは、このフォルダーにある必要があります。 -
ジョブが作成されたかどうかを確認する: Databricks ワークスペースのサイドバーで、 [ワークフロー] をクリックします。
-
「ジョブ 」タブで、「 retrieve-filter-baby-names-job 」をクリックします。
-
「タスク」 タブをクリックします。 retrieve-baby-names-task と filter-baby-names-task の 2 つのタスクが必要です。
この手順の後にバンドルに変更を加えた場合は、手順 6 から 7 を繰り返して、バンドル構成がまだ有効かどうかを確認してから、プロジェクトを再デプロイする必要があります。
ステップ 8: デプロイされたプロジェクトを実行する
この手順では、ワークスペースで Databricks ジョブを実行します。
-
Databricks CLI を使用して、次のように
bundle run
コマンドを実行します。Bashdatabricks bundle run -t development retrieve-filter-baby-names-job
-
ターミナルに表示される
Run URL
の値をコピーし、この値を Web ブラウザーに貼り付けて Databricks ワークスペースを開きます。 -
Databricksワークスペースで、2 つのタスクが正常に完了し、緑色のタイトル バーが表示されたら、 filter-baby-names-task タスクをクリックしてクエリ結果を表示します。
この手順の後にバンドルに変更を加えた場合は、手順 6 から 8 を繰り返して、バンドル構成がまだ有効かどうかを確認し、プロジェクトを再デプロイして、再デプロイされたプロジェクトを実行する必要があります。
ステップ9: クリーンアップします
この手順では、デプロイされた 2 つのノートブックとジョブをワークスペースから削除します。
-
Databricks CLI を使用して、次のように
bundle destroy
コマンドを実行します。Bashdatabricks bundle destroy
-
ジョブの削除要求を確認する: リソースを完全に破棄するように求められたら、「
y
」と入力してEnter
キーを押します。 -
ノートブックの削除要求を確認する: 以前にデプロイしたフォルダーとそのすべてのファイルを完全に破棄するように求められたら、「
y
」と入力してEnter
キーを押します。
bundle destroy
コマンドを実行すると、デプロイされたジョブと、デプロイされた 2 つのノートブックを含むフォルダーのみが削除されます。このコマンドでは、最初のノートブックで作成した babynames.csv
ファイルなどの副作用は削除されません。 babybnames.csv
ファイルを削除するには、次の操作を行います。
- Databricks ワークスペースのサイドバーで、 [カタログ] をクリックします。
- [DBFS の参照 ] をクリックします。
- FileStoreフォルダをクリックします 。
- babynames.csv の横にあるドロップダウン矢印をクリックします。をクリックし、[ 削除 ] をクリックします。
- 開発マシンからバンドルも削除する場合は、ステップ 1 からローカル ディレクトリを削除できます。