【 Azure Databricks ETL編 その1 】
概要
Azure Databricks を使ってみよう! ということで、以下の3ステップで簡単に說明します。
- 【環境準備編】:Azure CLI から Azure Databricks 環境を作成します
- 【抽出変換編】:Databricks から ADLS Gen2 のデータを抽出し、変換します
- 【格納編】:Databricks で ETL されたデータを ADLS Gen2 に格納します
今回は 【環境準備編】の說明となります
- Azure DataLake Storage Gen2
- ストレージアカウント作成
- データアップロード用コンテナ作成
- ETL後のデータ格納用コンテナ作成
- データの準備
- Gen2 のデータアップロード用コンテナにローカルにあるファイルをアップロード
- Azure Databricks
- workspace作成
- トークン認証
ローカル環境
- macOS Big Sur 11.3
- python 3.8.3
- Azure CLI 2.28.0
前提条件
- Azure環境がすでに用意されていること(テナント/サブスクリプション)。
- ローカル環境に「azure cli」がインストールされていること。
事前準備
Azure CLI の機能拡張
## 最新の databricks CLI バージョンを使用する拡張機能をインストールします
$ az extension add -n databricks
## Azure CLI の確認
$ az version
{
"azure-cli": "2.28.0",
"azure-cli-core": "2.28.0",
"azure-cli-telemetry": "1.0.6",
"extensions": {
"azure-iot": "0.10.13",
"databricks": "0.7.3",
"kusto": "0.3.0",
"stack-hci": "0.1.4"
}
}
## databricks-cli のインストール設定
$ pip install databricks-cli
Azure 環境の準備
### ローカル環境変数の定義
export RG_NAME=rg-ituru_bricks01
export SUBS_NAME=PSP2-01
export STORAGE_ACCOUNT=testaccount
export STORAGE_CONTAINER=cost-data
export ETL_CONTAINER=etl-cost-data
export DB_WORKSPACE_NAME=db-ituru_workspace01
## 使用するテナントへのログイン
$ az login --tenant <tenant_id>
## 使用サブスクリプションの定義
$ az account set --subscription $SUBS_NAME
## 使用サブスクリプションの確認(IsDefault=True)
$ az account list --output table
## サブスクリプションのリソースIDを取得
$ SUBS_ID=$(az account show --query "id" --output tsv)
## Azure Data Bricks 用のリソースグループ作成
$ az group create --name $RG_NAME --location japaneast
ローカル環境の作業ディレクトリ
UploadCostData ディレクトリ配下のファイルは、この記事 で取得したAzure使用料金のデータです
## UploadCostData ディレクトリ配下のファイルを今回の対象データとします
$ tree -a
.
└── UploadCostData
├── UsageCost_NSG-01_20210929_115527.json
└── UsageCost_iapp-01_20210929_115558.json
環境の構築
Gen2 の Storage Account の作成
## ストレージアカウントの作成
$ az storage account create --name $STORAGE_ACCOUNT --resource-group $RG_NAME -l japaneast --sku Standard_LRS --enable-hierarchical-namespace true
## 使用するコンテナの作成
### データアップロード用
$ az storage container create --name $STORAGE_CONTAINER --account-name $STORAGE_ACCOUNT
### ETL用
$ az storage container create --name $ETL_CONTAINER --account-name $STORAGE_ACCOUNT
## ストレージアカウントの認証情報の取得
$ az storage account keys list --account-name $STORAGE_ACCOUNT --subscription $SUBS_NAME --resource-group $RG_NAME --output table
CreationTime KeyName Permissions Value
-------------------------------- --------- ------------- -----------------------------
2021-10-15T20:17:11.969418+00:00 key1 FULL xxxxxxxxxxxxxxxxxxxxxxxxxxxx
2021-10-15T20:17:11.969418+00:00 key2 FULL yyyyyyyyyyyyyyyyyyyyyyyyyyyy
Azure Portal で確認すると、以下の表示となっています。
データのアップロード
## アップロードパス・ディレクトリ から コンテナーにすべてのファイルをアップロードします
$ az storage blob upload-batch --account-name $STORAGE_ACCOUNT -d $STORAGE_CONTAINER -s ./UploadCostData/*.json
Finished[#############################################################] 100.0000%
[
{
"Blob": "https://testaccount.blob.core.windows.net/cost-data/UsageCost_iapp-01_20210929_115500.json",
"Last Modified": "2021-10-24T15:14:35+00:00",
"Type": "application/json",
"eTag": "\"0x8D99700FD813F9C\""
},
{
"Blob": "https://testaccount.blob.core.windows.net/cost-data/UsageCost_NSG-01_20210929_115617.json",
"Last Modified": "2021-10-24T15:14:35+00:00",
"Type": "application/json",
"eTag": "\"0x8D99700FD86305B\""
}
]
## コンテナー内の BLOB を一覧表示する
$ az storage blob list --account-name $STORAGE_ACCOUNT --container-name $STORAGE_CONTAINER --output table
Name Blob Type Blob Tier Length Content Type Last Modified Snapshot
-------------------------------------- ----------- ----------- -------- ---------------- ------------------------- ----------
UsageCost_NSG-01_20210929_115617.json BlockBlob Hot 14822 application/json 2021-10-24T15:14:35+00:00
UsageCost_iapp-01_20210929_115500.json BlockBlob Hot 10807 application/json 2021-10-24T15:14:35+00:00
Azure Data Bricks の作成
14日間無料のトライアル版で構成します
## Azure Databricks Workspace の作成・・・完了まで数分かかります
az databricks workspace create --resource-group $RG_NAME --name $DB_WORKSPACE_NAME --location japaneast --sku trial
## 作成した WorkspaceURL の取得
$ WS_URL=$(az databricks workspace show --resource-group $RG_NAME --name $DB_WORKSPACE_NAME --query "workspaceUrl" --output tsv)
$ echo $WS_URL
adb-333338888844444.28.azuredatabricks.net
Azure Databricks 個人用アクセストークンを使用して認証する
Azure Portal で上記で作成した Databricks サービスに移動し、「ワークスペースの起動」ボタンを押し、Azure Databricks ポータル画面を表示させます。
GUI からのトークン作成(初回作成は必ずGUIから行なう)
表示された画面の左側にある「Settings」ー「User Settings」を選択します
新たに表示された画面から「Generate New Token」ボタン押す ⇒ 次の画面で以下の値を設定し「Generate」ボタンを押す
項目 | 値 |
---|---|
Comment | TEST_20211025 |
Lifetime (days) | 14 |
作成されたトークンを環境変数に定義します
$ export TOKEN=dapi44444444333333332222222211111111
CLI からのトークン作成(2個目(2回目)以降はCLIからの作成が可能)
####(トークンに指定する有効期限:36時間(129600秒), 10日間(864000秒), 15日間(1296000秒))
https://docs.microsoft.com/ja-jp/azure/databricks/dev-tools/cli/tokens-cli
$ TOKEN=$(databricks tokens create --lifetime-seconds 1296000 --comment "Test_20211125" | jq .token_value --raw-output)
$ echo $TOKEN
dapi55555555666666667777777788888888
トークンを使用して認証する
$ export DATABRICKS_AAD_TOKEN=$TOKEN
$ databricks configure --aad-token
Databricks Host (should begin with https://): https://adb-333338888844444.28.azuredatabricks.net
## 認証情報の確認(~/.databrickscfg ファイルを確認)
[DEFAULT]
host = https://adb-333338888844444.28.azuredatabricks.net
token = dapi44444444333333332222222211111111
## 複数の接続プロファイルを定義する場合
$ databricks configure --aad-token --profile 'AUC01'
## 認証情報の確認(~/.databrickscfg ファイルを確認)
[AUC01]
host = https://adb-333338888844444.28.azuredatabricks.net
token = dapi55555555666666667777777788888888
# 動作確認
$ databricks fs ls
Azure Data Bricks リソースのクリーンアップ
## リソースをクリーンアップするには、ワークスペースを削除します
az databricks workspace delete --resource-group $RG_NAME --name $DB_WORKSPACE_NAME
まとめ
Azure CLI と Azure Databricks Portal を使用した環境構築でした、、、