Azure Databricks へのクラウド オブジェクト ストレージのマウント

Azure Databricks を使用すると、ユーザーはクラウド オブジェクト ストレージを Databricks ファイル システム (DBFS) にマウントして、クラウドの概念に慣れていないユーザーのデータ アクセス パターンを簡略化できます。 マウントされたデータは Unity カタログでは機能しません。Databricks では、マウントの使用から移行し、その代わりに Unity カタログを使用してデータ ガバナンスを管理することを推奨しています。

Azure Databricks を使用して、どのようにクラウド オブジェクト ストレージをマウントしますか?

Azure Databricks マウントを使用すると、ワークスペースとクラウド オブジェクト ストレージの間にリンクが作成されます。これにより、Databricks ファイル システムに関連する使い慣れたファイル パスを使用してクラウド オブジェクト ストレージと対話することができます。 マウントは、次の情報が格納されている /mnt ディレクトリの下にローカル エイリアスを作成することで機能します。

  • クラウド オブジェクト ストレージの場所。
  • ストレージ アカウントまたはコンテナーに接続するためのドライバーの仕様。
  • データにアクセスするために必要なセキュリティ資格情報です。

ストレージをマウントするための構文は何ですか?

source によって、オブジェクト ストレージの URI が指定されます (必要に応じて、セキュリティ資格情報のエンコードも可能です)。 mount_point によって、/mnt ディレクトリ内のローカル パスが指定されます。 一部のオブジェクト ストレージ ソースでは、省略可能な encryption_type 引数がサポートされています。 一部のアクセス パターンでは、追加の構成仕様を辞書として extra_configs に渡すことができます。

Note

Databricks では、extra_configs を使って、マウント固有の Spark と Hadoop の構成をオプションとして設定することをお勧めします。 このようにすると、構成は、クラスターまたはセッションではなく、マウントに確実に結び付けられます。

dbutils.fs.mount(
  source: str,
  mount_point: str,
  encryption_type: Optional[str] = "",
  extra_configs: Optional[dict[str:str]] = None
)

不適切な構成によってワークスペース内のすべてのユーザーにセキュリティで保護されていないアクセスが提供される可能性があるため、データ マウントを構成または変更する前に、ワークスペース管理者とクラウド管理者に確認してください。

注意

この記事で説明する方法に加えて、 Databricks Terraform プロバイダーdatabricks_mount を使用してバケットのマウントを自動化できます。

マウント ポイントのマウントを解除する

マウント ポイントのマウントを解除するには、次のコマンドを使用します。

dbutils.fs.unmount("/mnt/<mount-name>")

警告

エラーを回避するため、他のジョブがマウント ポイントへの読み取りまたは書き込みを行っている間は、マウント ポイントを変更しないでください。 マウントを変更した後は、他のすべての実行中のクラスターで必ず dbutils.fs.refreshMounts() を実行して、マウントの更新を伝達します。 「refreshMounts コマンド (dbutils.fs.refreshMounts)」を参照してください。

ABFS を使って ADLS Gen2 または Blob Storage をマウントする

認証に Microsoft Entra ID (旧称 Azure Active Directory) アプリケーション サービス プリンシパルを使用して、Azure ストレージ アカウントにデータをマウントできます。 詳細については、「Microsoft Entra ID (旧称 Azure Active Directory) でサービス プリンシパルを使ってストレージにアクセスする」を参照してください。

重要

  • Azure Databricks ワークスペースのすべてのユーザーが、マウントされた ADLS Gen2 アカウントにアクセスできます。 ADLS Gen2 アカウントへのアクセスに使用するサービス プリンシパルには、その ADLS Gen2 アカウントへのアクセスのみを許可する必要があります。他の Azure リソースへのアクセスを許可しないでください。
  • クラスターを介してマウント ポイントを作成すると、クラスター ユーザーはすぐにそのマウント ポイントにアクセスできます。 別の実行中のクラスターのマウント ポイントを使用するには、その実行中のクラスターで dbutils.fs.refreshMounts() を実行して、新しく作成されたマウント ポイントを使用できるようにする必要があります。
  • ジョブの実行中にマウント ポイントをマウント解除すると、エラーが発生する可能性があります。 実稼働ジョブによって、処理の一部としてストレージがマウント解除されないようにします。
  • シークレットを使用するマウント ポイントは、自動的には更新されません。 マウントされたストレージが、ローテーション、期限切れ、または削除されたシークレットに依存している場合、401 Unauthorized などのエラーが発生する可能性があります。 このようなエラーを解決するには、そのストレージをマウント解除して再マウントする必要があります。
  • ABFS エンドポイントを使用して Azure Data Lake Storage Gen2 ストレージ アカウントを正常にマウントするには、階層型名前空間 (HNS) を有効にする必要があります。

ノートブックで次を実行して、マウント ポイントを認証および作成します。

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": "<application-id>",
          "fs.azure.account.oauth2.client.secret": dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
          "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<directory-id>/oauth2/token"}

# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)
val configs = Map(
  "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" -> "<application-id>",
  "fs.azure.account.oauth2.client.secret" -> dbutils.secrets.get(scope="<scope-name>",key="<service-credential-key-name>"),
  "fs.azure.account.oauth2.client.endpoint" -> "https://login.microsoftonline.com/<directory-id>/oauth2/token")
// Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/",
  mountPoint = "/mnt/<mount-name>",
  extraConfigs = configs)

  • <application-id> を Azure Active Directory アプリケーションのアプリケーション (クライアント) ID に置き換えます。
  • <scope-name> を Databricks シークレット スコープ名に置き換えます。
  • <service-credential-key-name> をクライアント シークレットを含むキーの名前に置き換えます。
  • <directory-id> を Azure Active Directory アプリケーションのディレクトリ (テナント) ID に置き換えます。
  • <container-name> を ADLS Gen2 ストレージ アカウント内のコンテナーの名前に置き換えます。
  • <storage-account-name> は、ADLS Gen2 ストレージ アカウントの名前に置き換えます。
  • <mount-name> を DBFS の目的のマウント ポイントの名前に置き換えます。