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

重要

マウントは、従来のアクセスパターンです。Databricksでは、すべてのデータアクセスの管理にUnity Catalogの使用を推奨しています。「Unity Catalogを使用したクラウドオブジェクトストレージへの接続」を参照してください。

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 CloudプロジェクトIDを指定する必要があります。

クラスターのセキュリティを設定する際には、 サービスアカウントのメールアドレスを使用する必要があります。

バケットは、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")
)