LoginSignup
0
0

More than 1 year has passed since last update.

Azure DatabricksのDBFSにAzure Data Lake Storage Gen2 (ADLS Gen2)をマウント 手順

Last updated at Posted at 2021-12-17

概要

Azure Databricks の DBFS に ADLS Gen2 をマウントする手順をご紹介します。
マウントすると、Databricks 内の DBFS に /mntディレクトリ が作成され、いつでもアクセスができるようになります。

目次

1. サービスプリンシパルの作成 サービスプリンシバルの作成にはAzure ワークスペース内の所有者権限が必要になります
2. 新しいクライアントシークレットの作成
3. ADLS Gen2へのアクセス権限の付与 サービスプリンシバルの作成にはAzure ワークスペース内の所有者権限が必要になります
4. ADLS Gen2をDBFSにマウント

サービスプリンシパルの作成

Azure DatabricksのDBFSにAzure Data Lake Storage Gen2 (ADLS Gen2)をマウントするには、サービスプリンシパルの設定が必要になるため、サービスプリンシパルの作成を行います。
サービスプリンシバルの作成にはAzure ワークスペース内の所有者権限が必要になります

Azure Portal > Azure Active Directory > エンタープライズアプリケーションを開く
image.png

エンタープライズアプリケーション / すべてのアプリケーションが開く
新しいアプリケーションの作成 を開く
image.png

Azure AD ギャラリーの参照が開く
以下の画像の赤枠をクリック
image.png

アプリケーションの追加 が開く
開発中のアプリケーション 作業中のアプリを登録して Azure AD と統合します をクリック (以下の画像の赤枠をクリック)> アプリの登録をクリック
ここからアプリの登録をしていきます
image.png
image.png

アプリの登録 > 新規登録をクリック
image.png

アプリの登録を行っていく
名前: apsnews-AAD
サポートされているアカウントの種類: この組織ディレクトリのみに含まれるアカウント を指定
リダイレクト URI (省略可能): Databricks の URL を入力 https://japaneast.azuredatabricks.net/ こちらの URL をコピー&ペースト

こちらの入力が終わったら登録をクリック
image.png

アプリの登録が終わると、以下の画面に遷移する
登録後に表示される「アプリケーション(クライアント)ID」と「ディレクトリ(テナント)ID」はマウント時のパラメータとして必要になるため、コピーして控えておきます
image.png

新しいクライアントシークレットの作成

証明書とシークレット > 新しいクライアントシークレット をクリック
image.png
「説明」と「有効期限」を設定して「追加」をクリック
image.png
作成されるとクライアントシークレットの文字列が表示される
この文字列は作成後最初の1回しか表示されないため、コピーして控えておく
クライアントシークレットもマウント時の必要パラメータとなる
image.png

ADLS Gen2へのアクセス権限の付与

ストレージアカウント > 作成したIAMアカウント > アクセス制御 (IAM) > ロールの割り当ての追加 をクリック
image.png

「役割」を「ストレージBLOBデータ共同作成者」に変更し、「次へ」をクリック
image.png

以下の画面に遷移する
「サービスプリンシパルの作成」で作成したサービスプリンシパル:apsnews-AAD を選択して「次へ」をクリック こちらで権限割り当ては完了。
image.png

「ロールの割り当て」タブをクリックするとサービスプリンシパルに割り当てられた権限が確認できます
image.png

ADLS Gen2をDBFSにマウント

DBFSにADLS Gen2をマウントするには、下記のスクリプトを使用
(ストレージ、サービスプリンシパル情報、マウント先DBFSディレクトリは作成したリソースに合わせて変更する)

ストレージ情報
ストレージアカウント名:ADLS Gen2 アカウント名を入力
ファイルシステム名:ADLS Gen2に追加したコンテナ名を入力
image.png

サービスプリンシパル情報
アプリケーション(クライアント)ID:サービスプリンシバルの作成 Azure AD > アプリの登録から保持していたアプリケーション(クライアント)ID を入力
ディレクトリ(テナント)ID:サービスプリンシバルの作成 Azure AD > アプリの登録から保持していたディレクトリ(テナント)ID を入力
クライアントシークレット:サービスプリンシバルの作成 Azure AD > クライアントシークレットでコピーした値を入力

マウントするDBFSディレクトリ
mount_point_adls = "/mnt/mnt/my_adls2_fs

こちらのスクリプトを Databricks 上で実行すると、マウントが完了
Databricks > Data > DBFS からマウントした ADLS Gen2 が確認できる

# ストレージ情報
storage_alds = {
    "account": "{ストレージアカウント名}",
    "file_system": "{ファイルシステム名}"
}

# サービスプリンシパル情報
service_principal = {
  "client_id": "{アプリケーション(クライアント)ID}",
  "directory_id": "{ディレクトリ(テナント)ID}",
  "client_secret": "{クライアントシークレット}"
  # "client_secret": dbutils.secrets.get(scope="{スコープ名}", key="{キー名}") # Key Vault使用時
}

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

try:
  # マウント状態のチェック
  mount_dir = mount_point_adls
  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

  if not mounted:
    # Azure Data Lake Storage Gen2のマウント
    configs = {
      "fs.azure.account.auth.type": "OAuth",
      "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
      "fs.azure.account.oauth2.client.id": service_principal["client_id"],
      "fs.azure.account.oauth2.client.secret": service_principal["client_secret"],
      "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/{directory_id}/oauth2/token".format(**service_principal)
    }

    mounted = dbutils.fs.mount(
      source="abfss://{file_system}@{account}.dfs.core.windows.net/".format(**storage_alds),
      mount_point=mount_point_adls,
      extra_configs=configs
    )

except Exception as e:
    raise e

"mounted: {}".format(mounted)
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