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

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

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

Unity Catalog 対応ワークスペースでの DBFS の使用方法

hive_metastore 内のテーブル (DBFS によって管理されるデータとストレージの資格情報が含まれる場合があります) に対して実行されるアクションでは、レガシ データ アクセス パターンが使用されます。 ワークスペース スコープ hive_metastore のマネージド テーブルは、DBFS ルートに格納されます。

シングル ユーザー アクセス モードでの DBFS の動作方法

シングル ユーザー アクセス モードで構成されたクラスターには、DBFS ルート内のすべてのファイルとマウントされたデータを含む、DBFS へのフル アクセス権があります。

共有アクセス モードでの DBFS の動作方法

共有アクセス モードでは、Unity Catalog データ ガバナンスと Azure Databricks レガシ テーブル ACL が組み合わせられます。 hive_metastore 内のデータにアクセスできるのは、アクセス許可が明示的に付与されているユーザーのみです。

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

Unity Catalog の外部の場所で DBFS を使用しない

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

Unity Catalog で管理されるストレージをセキュリティで保護する

マネージド テーブルとマネージド ボリュームのデータ ファイルを保存するためのマネージド保存場所を使用する Unity Catalog。

Databricks では、マネージド保存場所について次をお勧めします。

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

外部の場所に既存のデータを追加する

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

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

クラスターの構成は Unity Catalog ファイル システム アクセスによって無視される

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

複数パス アクセスに関する制限事項

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

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

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

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

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