メインコンテンツまでスキップ

DBFS と Unity Catalog のベスト プラクティス

重要

DBFSルートとDBFSマウントは両方とも非推奨であり、 Databricksでは推奨されていません。 新しいアカウントはこれらの機能にアクセスできない状態でプロビジョニングされます。Databricks 、代わりにUnity Catalogボリューム、外部ロケーション、またはワークスペース ファイルを使用することをお勧めします。

Unity Catalog では、DBFS とはまったく異なる方法でデータ ガバナンスにアプローチする新しい構成と概念が多数導入されています。 この記事では、 Unity Catalog 外部ロケーションと DBFS の操作に関するいくつかのベスト プラクティスについて説明します。

Databricks では、Unity Catalog対応のDatabricksワークスペースのほとんどのユースケースで、DBFS とマウントされたクラウドオブジェクトストレージを使用しないことをお勧めします。 この記事では、マウントされたクラウドオブジェクトストレージを使用する必要があるいくつかのシナリオについて説明します。 Databricks では、そこに保存されているファイルまたはデータを Unity Catalogに移行する必要がある場合を除き、DBFSルートを Unity Catalogと組み合わせて使用することはお勧めしません。

Unity Catalog 対応のワークスペースでは DBFS はどのように使用されますか?​

hive_metastore内のテーブルに対して実行されるアクションでは、DBFS によって管理されるデータとストレージの資格情報を含む可能性のある従来のデータ アクセス パターンが使用されます。 ワークスペーススコープのhive_metastore内のマネージドテーブルは、DBFS ルートに保存されます。

DBFS は専用アクセス モード (以前のシングル ユーザー アクセス モード) でどのように機能しますか?​

専用アクセス・モードで構成されたコンピュート・リソースは、DBFSルート内のすべてのファイルおよびマウントされたデータを含む、DBFSへのフル・アクセス権を持ちます。

DBFS は標準アクセス モード (以前の共有アクセス モード) でどのように機能しますか?​

標準アクセスモードは Unity Catalog データガバナンスと Databricks レガシテーブルACLを組み合わせたものです。 hive_metastore内のデータにアクセスできるのは、明示的に権限を付与されたユーザーのみです。

DBFS を使用してファイルを直接操作するには、 ANY FILE アクセス許可が付与されている必要があります。 ANY FILE では、ユーザーはhive_metastore内のレガシ テーブル ACL をバイパスし、DBFS によって管理されるすべてのデータにアクセスできるため、Databricks では、この権限を付与する際に注意することをお勧めします。

DBFSをUnity Catalogの外部ロケーションと併用しないでください​

Unity Catalog完全なクラウド URI パスを使用してマネージドオブジェクトのストレージ ディレクトリに対する許可を識別することで、外部ロケーションのデータへのアクセスを保護します。 DBFS マウントは、Unity Catalog を完全にバイパスするまったく異なるデータ アクセス モデルを使用します。 Databricks では、ワークスペースやアカウント間でデータを共有する場合を含め、DBFS マウントと UC 外部ボリューム間でクラウドオブジェクトストレージ ボリュームを再利用しないことをお勧めします。

Unityカタログで管理されているストレージを保護してください​

Unity Catalogはマネージドテーブルとボリュームのデータ ファイルを保存するためにマネージドストレージロケーションを使用します。

Databricks では、マネージドストレージの場所として以下を推奨しています。

  • 新しいストレージ アカウントまたはバケットを使用します。
  • Unity Catalog のカスタム ID ポリシーを定義します。
  • Unity Catalog によって管理される Databricks へのすべてのアクセスを制限します。
  • Unity Catalog 用に作成された ID アクセス ポリシーへのすべてのアクセスを制限します。

既存のデータを外部ロケーションに追加する​

外部ロケーションを使用して、既存のストレージアカウントを Unity Catalog にロードすることが可能です。 セキュリティを最大限に高めるために、 Databricks は、他のすべてのストレージ資格情報とアクセス パターンを取り消した後でのみ、ストレージ アカウントを外部ロケーションに読み込むことをお勧めします。

DBFSルートとして使用されているストレージ アカウントを Unity Catalogの外部ロケーションとして読み込まないでください。

クラスター構成は、 Unity Catalog ファイル・システム・アクセスによって無視されます​

Unity Catalog は、ファイルシステム設定のクラスター構成を考慮しません。 つまり、クラウドオブジェクトストレージでカスタム動作を構成するための Hadoop ファイルシステム設定は、Unity Catalog を使用してデータにアクセスするときには機能しません。

マルチパスアクセスに関する制限​

通常、Unity Catalog と DBFS を一緒に使用できますが、親子関係が等しいパスまたは共有されているパスを、異なるアクセス方法を使用して同じコマンドまたはノートブック セルで参照することはできません。

たとえば、外部テーブル foo がロケーションa/b/cの hive_metastoreで定義され、外部ロケーションが Unity Catalogのa/b/で定義されている場合、次のコードはエラーをスローします。

Python
spark.read.table("foo").filter("id IS NOT NULL").write.mode("overwrite").save("a/b/c")

このエラーは、このロジックが 2 つのセルに分割されている場合は発生しません。

Python
df = spark.read.table("foo").filter("id IS NOT NULL")
Python
df.write.mode("overwrite").save("a/b/c")