1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure Data FactoryからAzure DatabricksのJobAPIを実行する

Posted at

はじめに

Azure Data Factory(以下、ADF)にはAzure Databricks上のノートブックをジョブ実行する機能がありますが、
Delta Live Tableなど、API経由でしかジョブ実行できないものがあるので、API実行のパイプラインを共有します。

準備

Databricks Workspace IDの確認

1.Databricksにアクセスしてアドレスバーのここを確認、メモします。

2022-09-22-16-16-09.png

Jobの作成

1.Createします。

2022-09-22-16-12-00.png

2.対象のノートブックをtaskとして登録

2022-09-22-16-13-45.png

  1. Job Detailsにて、Job IDを確認しておきます。

2022-09-22-16-14-32.png

Data Factoryへの権限付与

  1. 共同作成者ロールを付与します。 (ワークスペースユーザーとしても追加する方法もありますが、とりあえずAzure RBACで共同作成者にしておけばワークスペースの管理者になってくれるので割愛します。)

2022-09-22-16-18-42.png

パイプラインテンプレートのインポート

1.run_databricks_job.zipからダウンロードします。

2.ADF Portal上でインポートします。

2022-09-22-16-22-00.png

3.特に設定不要でインポートされます。

2022-09-22-16-22-39.png

パイプラインの内容解説

2022-09-22-16-08-10.png

パラメータ

名前 説明 備考
DatabricksWorkspaceId DatabricksのワークスペースIDを入力します。
WaitSecond ステータスチェックの間隔(秒) 既定値30秒
JobId 実行したいjobのIDを入力します。

Jobの実行

2022-09-22-16-25-45.png

  • Jobs APIを利用しています。
  • POST URLにDatabricksWorkspaceIdを利用しており、対象のDatabricks Workspaceで /2.1/jobs/run-now を実行しています。
    expression
     https://@{pipeline().parameters.DatabricksWorkspaceId}.azuredatabricks.net/api/2.1/jobs/run-now
    
  • Bodyには、パラメータが入るようになっています。その他の制御をかけたい場合はAPIリファレンスを参照に追加可能です。
    expression
      {"job_id":@{pipeline().parameters.JobId}}
    
  • MSI認証でADFからDatabricksにAPIをキックしています。
  • MSI認証をするためにリソースにDatabricksのエンタープライズアプリケーションのID 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d を入力しています。
    • なお、全テナント共通のIDとなっております。
      2022-09-22-16-29-44.png

Job実行の状態チェックとUntil loop

2022-09-22-17-17-28.png

  • Until 条件は変数 run_status を確認しています。この変数は状態チェックにより値がセットされます。(既定はRUNNING)
    • @not(equals(variables('run_status'),'RUNNING'))
  • Jobs APIを利用しています。
  • GET URLにDatabricksWorkspaceIdとジョブ実行時に取得されるrun_idを利用しており、対象のDatabricks Workspaceで 2.1/jobs/runs/get?run_id={run_id} を実行しています。
    expression
     https://@{pipeline().parameters.DatabricksWorkspaceId}.azuredatabricks.net/api/2.1/jobs/runs/get?run_id=@{activity('execute_job_run').output.run_id}
    

ジョブ実行失敗確認時のパイプライン失敗とエラーメッセージ

2022-09-22-17-17-41.png

  • 変数 run_status がFAILEDとなったときに失敗アクティビティを実行して、パイプラインをエラー終了させます。
  • エラーメッセージにはステータス確認時に取得できる実行確認ページのURLと結果メッセージを表示させます。
expression

Failed. 
Message: @{activity('get_run_status').output.state.state_message}
Run page URL: @{activity('get_run_status').output.run_page_url}

実行テスト

実行してみます。

2022-09-22-17-20-38.png

正常終了

2022-09-22-17-30-21.png

各主要なアクティビティの出力を確認します

ジョブ実行API結果

2022-09-22-17-30-48.png

ジョブステータス確認結果(最後)

2022-09-22-17-43-58.png

異常終了

2022-09-22-17-42-39.png

各主要なアクティビティの出力を確認します

ジョブ実行API結果

2022-09-22-17-32-48.png

ジョブステータス確認結果(最後)

2022-09-22-17-43-25.png

エラー結果

2022-09-22-17-44-19.png

参考

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?