【Azure Databricks 入門】第3.1弾 DBFS に Blob Storage をマウント

はじめに

Azure Databricks 第3.1弾として DBFS に Blob Storage をマウントする方法を解説します。

  • Azure Databricks に興味がある
  • 機械学習に興味がある
  • クラウド上でデータ分析をやってみたい

上記の項目に当てはまる方はぜひ読んでいただきたい内容となっています。

記事の概要

  • ストレージアカウントの作成から DBFS に Blob Storage をマウント方法を解説しています。
  • Blob Storage のアンマウント方法を解説しています。
  • ストレージアカウントキーなどの秘密情報を管理する Azure Key Vault を使用します。

前回記事

Azure Databricks: 1. リソースの作成

Azure Databricks: 2. Databricksの基本事項

既存の Blob Storage をマウントする場合の方法

※既存のBlob Storageをマウントする場合は以下の方法で作成してください。

ストレージアカウントの作成

画像1.png

作成に必要な情報を入力します。

設定内容は任意ですが、

「リソースグループ」と「場所」はAzure Databricksと同じものを指定します。

設定が出来たら「次: 詳細 >」をクリックします。

画像2.png

「詳細」設定に関しては、今回はデフォルトのままでいきます。

「確認および作成」をクリックします。

画像3.png
設定内容に誤りがないことを確認、

「作成」をクリックします。

画像4.png

しばらく待機し、作成が完了したら作成したリソースに移動します。

画像5.png
マウント時のパラメータとして

ストレージアカウントの「アクセスキー」が必要です。

メニューの「アクセスキー」を開きます。

「key1」または「key2」いずれかの「キー」をコピーして控えておきます。

画像6.png

Blobコンテナーの作成とファイルの配置

ストレージアカウントのメニューの「概要」に戻り、

「サービス」の「BLOB」をクリックします。

画像7.png

「+コンテナー」をクリック

「名前」を任意のコンテナ名、

「パブリックアクセスレベル」を「プライベート」

としてコンテナを作成します。

画像8.png

ファイルを配置するため作成したコンテナーをクリックします。

コンテナーを開きます。

画像9.png

「↑アップロード」をクリックします。

ファイルを選択して「アップロード」をクリックします。

画像10.png

アップロードが完了するとコンテナーにファイルのリストが表示されます。

画像11.png

DBFSにBlob Storageをマウント

Blobコンテナーのマウント

Blob Storageのマウントは下記のスクリプトを使用します。

※以下の項目は作成したリソースに合わせて変更してください。

– ストレージ情報

– マウント先の DBFS ディレクトリ

一度マウントすると、Clusterを停止・変更してもマウント状態が維持されます。

マウントされた状態で再度操作を実行するとエラーが発生します。

マウント状態をチェックするか、スクリプトをコメントアウトしてエラーの回避します。

Cmd 1 
# Blob Storage情報
storage = {
  "account": "{ストレージアカウント名}",
  "container": "{Blobコンテナ名}",
  "key": "{ストレージアカウントキー}"
}

# マウント先DBFSディレクトリ
mount_point = "/mnt/{マウント先ディレクトリ}"

try:
# マウント状態のチェック
  mount_dir = mount_point
  if mount_dir[-1] == "/":
    mount_dir = mount_dir[:-1]
  if len(list(filter(lambda x: x.mountPoint == mount_dir, dbutils.fs.mounts()))) > 0:
    print("Already mounted.")
    mounted = True
  else:
    mounted = False

# Blob Storageのマウント
  if not mounted:
    source = "wasbs://{container}@{account}.blob.core.windows.net".format(**storage)
    conf_key = "fs.azure.account.key.{account}.blob.core.windows.net".format(**storage)

    mounted = dbutils.fs.mount(
      source=source,
      mount_point = mount_point,
      extra_configs = {conf_key: storage["key"]}
    ) 

except Exception as e:
  raise e

"mounted: {}".format(mounted)
画像12.png

下記スクリプトでマウントされているディレクトリを確認します。

Blob Storage をマウントしたディレクトリがリストで確認できます。

Cmd 2 
# mount_point = "/mnt/{マウント先ディレクトリ}"
display(dbutils.fs.mounts())
画像13.png

マウントされたディレクトリの確認

下記スクリプトを使用してマウントしたディレクトリ内のファイルを表示します。

※ マウントしたディレクトリにファイルが存在しないとエラーが発生します。

Cmd 3 
# mount_point = "/mnt/{マウント先ディレクトリ}"
display(dbutils.fs.ls(mount_point))
画像14.png

Blob コンテナーのアンマウント

ストレージのマウントを解除する場合は下記スクリプトを使用します。

Cmd 4 
# mount_point = "/mnt/{マウント先ディレクトリ}"
dbutils.fs.unmount(mount_point)
画像15.png

秘密情報の安全な管理

秘密情報をスクリプト上に記載することはセキュリティ上の懸念となります。

ストレージアカウントキーのような秘密情報を安全に管理するため、

Azure Key Vault の使用が推奨されます。

Azure Key Vault のキーコンテナー作成

Azure ポータルの「リソースの作成」で「Key Vault」を検索します。

検索候補の「Key Vault」をクリックして作成を開始します。

画像16.png

「キーコンテナーの作成」に必要な情報を入力します。

  • 「名前」: 任意の名称
  • 「リソースグループ」: Azure Databricksと同じものを指定
  • 「場所」: Azure Databricksと同じものを指定。

その他の設定はデフォルトのままとします。

画像17.png

作成が完了したらリソースに移動します。

画像18.png

キーの登録

作成したキーコンテナーにストレージアカウントキーを登録します。

作成したリソースのメニューから「シークレット」を開きます。

「+生成/インポート」をクリックします。

画像19.png
  • 「アップロードオプション」:「手動」と選択
  • 「名前」:任意の名称を入力
  • 「値」:ストレージアカウントキーを入力

「作成」をクリックします。

画像20.png

Databricks に Azure Key Vault を登録

キーコンテナーのメニューから「プロパティ」を開きます。

「 DNS 名」と「リソース ID 」をコピーして控えておきます。

Databricks ワークスペースのホーム画面を開きます。

URL に「#secrets/createScope」を追加します。

「Create Secret Scope」のページを開きます。

  • 「Scope Name」に任意のスコープ名を入力
  • 「DNS Name」: 作成したキーコンテナーの「プロパティ」の「DNS名」を入力
  • 「Resource ID」: 作成したキーコンテナーの「プロパティ」の「リソースID」を入力

※ Databricks作成時にStandard Planを選択した場合、

「Manage Principal」は「All Users」のみ選択できます。

入力したスコープ名はキーの取得に必要となるため控えておきます。

画像21.png

Notebookを開き、下記のスクリプトでスコープのリストを確認します。

スコープが登録されていると、

登録したスコープがリストにあることが確認できます。

Cmd1 
display(dbutils.secrets.listScopes())
画像22.png
BlobコンテナーのマウントにKey Vaultのキーを使用する場合は、

Blob Storageの情報を下記のように書き換えます。

# Blob Storage情報
storage = {
  "account": "{ストレージアカウント名}",
  "container": "{Blobコンテナ名}",
# "key": "{ストレージアカウントキー}"
  "key": dbutils.secrets.get(scope="{スコープ名}", key="{シークレット名}")
}

最後に

ストレージアカウントの作成から DBFS に Blob Storage をマウントする方法を解説していきました。

Azure Key Vault を使用した秘密鍵情報の管理を行うことで、データ分析業務に注力できる環境整備が行えそうですね。

Azure Databricks でデータ分析を行う際の参考になれば幸いです。

次回もお楽しみに!

参考

Databricks Documentation – Data Sources – Azure Blob Storage

クイックスタート:Azureポータルを使用してAzure Key Vaultから秘密を設定および取得する

Azure Databricksの導入ならナレコムにおまかせください。

弊社は、Databricksのソリューションパートナーとしてお客さまのデジタルトランスフォーメーションの推進に貢献致します。

導入から活用方法までサポートします。お気軽にご相談ください。

Azure Databricksソリューションページはこちら

Databricks ソリューションパートナーに関してはこちら

この記事を書いた人

azure-recipe-user