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

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

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

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

  • クラウドオブジェクトストレージの場所。

  • ストレージ アカウントまたはコンテナーに接続するためのドライバーの仕様。

  • データへのアクセスに必要なセキュリティ資格情報。

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

source は、オブジェクト・ストレージのURIを指定します(オプションでセキュリティ資格証明をエンコードできます)。mount_point は、 /mnt ディレクトリ内のローカル パスを指定します。一部のオブジェクト・ストレージ・ソースでは、オプションの encryption_type 引数がサポートされています。 一部のアクセスパターンでは、追加のコンフィギュレーション仕様をディクショナリとして extra_configsに渡すことができます。

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)を参照してください。

DBFSを介したGCSバケットへのアクセス

DBFSマウントを使用するには、バケット名にアンダースコアを含めることはできません。 GCS バケットに書き込むには、バケットの Google クラウド projectId を取得する必要があります。

クラスタのセキュリティを構成するときは、 サービスアカウントの 電子メールアドレスを使用する必要があります。

バケットは「 Databricks File System (DBFS) とは」にマウントできます。 マウントは GCS の場所へのポインタであるため、データがローカルに同期されることはありません。

次の例は、GCS バケットをマウントするための基本的な構文を示しています。

bucket_name = "my-gcs-bucket"
mount_name = "my-mount"
dbutils.fs.mount(
  f"gs://{bucket_name}",
  f"/mnt/databricks/{mount_name}",
  extra_configs = {"fs.gs.project.id": "my-project-id"}
)
val bucket_name = "my-gcs-bucket"
val mount_name = "my-mount"
dbutils.fs.mount(
  s"gs://${bucket_name}",
  s"/mnt/databricks/${mount_name}",
  extraConfigs=Map("fs.gs.project.id" -> "my-project-id")
)