0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Databricks にて外部から REST API により Lakeflow ジョブを実行する手順

0
Posted at

概要

Databricks にて外部から REST API により Lakeflow ジョブを実行する手順を紹介します。 Databricks Free Edition での手順となっているため、多くの方に検証していただける手順にしています。

REST API 絡みの関連ドキュメントは下記です。

事前準備

Databricks Free Edition の申し込み

image.png

出所: Sign up for Databricks Free Edition - Databricks

Databricks Workspace の URL を取得

Databricks Workspace にアクセスし、 URL を控えます。

image.png

ノートブックを作成

+ 新規 -> ワークスペース -> ノートブックを選択しノード数を作成後、ノートブックの名称を変更します。

image.png

image.png

コードを記述します。

dbutils.widgets.text("parameter_01", "None")
print(dbutils.widgets.get("parameter_01"))

dbutils.notebook.exit("処理完了")

image.png

Lakeflow Job に追加

ノートブックの右上にあるスケジュールを選択し、Createを選択します。

image.png

作成したスケジュールのケバブメニューからView in Jobsを選択します。

image.png

ジョブの画面に移動することを確認します。

image.png

右側にあるスケジュールとトリガー領域にて削除を選択します。

image.png

ジョブの手動実行

今すぐ実行を選択します。

image.png

正常終了することを確認します。

image.png

image.png

サービスプリンシパルの取得

右上のユーザーロゴ -> 設定を選択します。

image.png

IDとアクセス -> サービスプリンシパルの管理を選択します。

image.png

Service Principalを追加を選択します。

image.png

新規追加を選択します。

image.png

サービスプリンシパル名を入力して、追加を選択します。

image.png

作成したサービスプリンシパルを選択します。

image.png

シークレットタブを選択し、シークレットを作成を選択します。

image.png

存続期間(日)1と入力し、生成を選択します。

image.png

表示された値を控えます。

image.png

サービスプリンシパルに対するジョブの実行権限を付与

ジョブの画面を表示します。

image.png

右下にある権限領域の権限を編集を選択します。

image.png

作成したサービスプリンシパル名を入力し、追加を選択します

image.png

Saveを選択します。

image.png

Job の情報を取得

ジョブの画面を表示します。

image.png

ジョブ ID の値を取得します。

image.png

image.png

REST API の実行

変数のセット

Databricks の URL、 サービスプリンシパルの ID、 サービスプリンシパルのシークレット、および、ジョブ ID を変数にセットします。

export DATABRICKS_HOST="https://dbc-xxxxxx.cloud.databricks.com"
export CLIENT_ID="<service-principal-client-id>"
export CLIENT_SECRET="<service-principal-oauth-secret>"

image.png

export JOB_ID="1045956103223040"

image.png

トークンの取得

OAUTH_TOKEN=$(
  curl --silent --request POST \
    --url "${DATABRICKS_HOST}/oidc/v1/token" \
    --user "${CLIENT_ID}:${CLIENT_SECRET}" \
    --data 'grant_type=client_credentials&scope=all-apis' \
  | jq -r '.access_token'
)

echo "$OAUTH_TOKEN" | cut -c1-20
eyJraWQiOiI2NDZiZWZk

image.png

ジョブの実行

RUN_ID=$(
  jq -n \
    --argjson job_id "$JOB_ID" \
    '{
      job_id: $job_id,
      notebook_params: {
        parameter_01: "sample_value_001"
      }
    }' \
  | curl --silent --request POST \
      "${DATABRICKS_HOST}/api/2.2/jobs/run-now" \
      --header "Authorization: Bearer ${OAUTH_TOKEN}" \
      --header "Content-Type: application/json" \
      --data @- \
  | jq -r '.run_id'
)
echo "RUN_ID=${RUN_ID}"
RUN_ID=357305013688600

image.png

ジョブの実行完了確認

while true; do
  RESP=$(
    curl --silent --get \
      "${DATABRICKS_HOST}/api/2.0/jobs/runs/get" \
      --header "Authorization: Bearer ${OAUTH_TOKEN}" \
      --data-urlencode "run_id=${RUN_ID}"
  )

  LIFE=$(echo "$RESP" | jq -r '.state.life_cycle_state')
  RESULT=$(echo "$RESP" | jq -r '.state.result_state // empty')
  MSG=$(echo "$RESP" | jq -r '.state.state_message // empty')

  echo "life_cycle_state=${LIFE} result_state=${RESULT} message=${MSG}"

  case "$LIFE" in
    TERMINATED|INTERNAL_ERROR|SKIPPED)
      break
      ;;
  esac

  sleep 10
done
life_cycle_state=TERMINATED result_state=SUCCESS message=

image.png

Databricks Workspace にてジョブが完了していることを確認できます。

image.png

ジョブの出力結果を取得

curl --silent --get \
  "${DATABRICKS_HOST}/api/2.0/jobs/runs/get-output" \
  --header "Authorization: Bearer ${OAUTH_TOKEN}" \
  --data-urlencode "run_id=${RUN_ID}" \
| jq -r '.notebook_output'
{
  "result": "処理完了",
  "truncated": false
}

image.png

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?