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を指定する必要があります。
クラスターのセキュリティを構成するときは、 サービス アカウント Eメール アドレスを使用する必要があります。
DBFSとはにバケットをマウントできます。マウントは GCS ロケーションへのポインタであるため、データはローカルで同期されません。
次の例は、GCSバケットをマウントするための基本的な構文です。
- Python
- Scala
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")
)