Azure Data FactoryでDatabricksのコードを自動更新
概要
Azure Data Factory(ADF)を活用して、「データの前処理->予測->後処理」を自動化するパイプラインを構築するケースを考えます。予測は、ADFのDatabricks Notebookアクティビティ使用して、Databricks Notebookを実行します。このようなシナリオでは、Notebookや関連モジュールをGitリポジトリでバージョン管理し、Databricks Repos[1]にクローンして利用することがあります。
しかし、リモートリポジトリに加えられた変更をDatabricks Reposに反映するには、Databricks上でGUI操作[2]によるPullが必要となるため、いくつかの課題が生じます。
-
課題1: 手間と時間の増大
リモートリポジトリに変更が発生するたびに、パイプライン実行前に手動でPull操作を行う必要があり、開発者の負担が増加します。 -
課題2: 古いコードでの実行リスク
Pull操作を忘れずに実行しないと、古いコードを使用して予測処理が実行されてしまう可能性があります。その結果、予測結果の精度が低下したり、再実行が必要になるなど、無駄な時間と労力を費やすことになりかねません。
本記事では、これらの課題を解決し、常に最新のコードで予測処理を実行する方法を紹介します。
方法
リモートリポジトリの変更点をDatabricks Reposに自動的にPullするアクティビティをADFで作成します。具体的には、ADFの「Webアクティビティ」を使って、Databricks Repos API[3]にPatchリクエストを送信します。
1. パラメータの設定
ADFのパラメータを4つ設定しておきます。
databricks_url
DatabricksのURL
azure databricksの場合、https://hogehoge.azuredatabricks.net
databricks_repo_id
対象のDatabircksリポジトリのリポジトリID
確認方法
ワークスペース->Repos->対象リポジトリ名の横にあるブランチ名 をクリックし、以下の画面に遷移
赤枠の部分にリポジトリIDが表示
target_branch
対象のブランチ名
databricks_token
Databricksのアクセストークン
アクセストークンの作成はこちら
2. webアクティビティの設定
webアクティビティのURL、メソッド、本文、認証、ヘッダーを設定します。
URL
@concat(
pipeline().parameters.databricks_url,
'/api/2.0/repos/',
pipeline().parameters.databricks_repo_id
)
メソッド
PATCH
本文
@concat(
'{"branch": "',
pipeline().parameters.target_branch,
'"}'
)
認証
なし
ヘッダー
Accept
とAuthorization
を設定します。
Accept
application/json
-
Authorization
ベアラー認証を使います。
@concat(
'Bearer ',
pipeline().parameters.databricks_token
)
挙動
-
Databricks Reposのブランチが、ADFで指定したブランチと一致する場合
リモートリポジトリの変更点がPullされ、Databricks Reposに反映されます。 -
Databricks Reposのブランチが、ADFで指定したブランチと異なる場合
まず、指定されたブランチに自動的にチェックアウトされます。その後、リモートリポジトリの変更点がPullされ、Databricks Reposに反映されます。
まとめ
本記事では、ADFパイプラインにDatabricks Reposの自動Pullを組み込む方法を紹介しました。この仕組みにより、手動Pullの手間を削減し、常に最新のコードでDatabricks上のNotebookを実行することが可能になります。
Discussion