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

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

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

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

DBFS ルートは、ワークスペーススコープの hive_metastore でのマネージド テーブルの作成など、Azure Databricks ワークスペースで実行されるいくつかのアクションに関連付けられているファイルを格納するための既定の場所です。 hive_metastore 内のテーブル (DBFS によって管理されるデータとストレージの資格情報が含まれる場合があります) に対して実行されるアクションでは、従来のデータ アクセス パターンが使用されます。

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

シングル ユーザー アクセス モードで構成されたクラスターには、DBFS ルート内のすべてのファイルとマウントされたデータを含む、DBFS へのフル アクセス権があります。 DBFS ルートおよびマウントは、このアクセス モードで使用できるため、Unity Catalog データセットへのアクセスが必要な ML ワークロードに適しています。

Databricks では、スケジュールされたジョブとシングル ユーザー アクセス モードでは、DBFS と Unity Catalog の両方で管理されるデータにアクセスする必要がある運用ワークロードに対してサービス プリンシパルを使用することをお勧めします。

共有アクセス モードでの 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 メタストアには、Azure Databricks アカウント管理者によって構成されたオブジェクト ストレージ アカウントがあります。 Unity Catalog では、この場所を使用して、Unity Catalog で管理されるテーブルのすべてのデータとメタデータを格納します。

Unity Catalog メタストアに使用されるストレージ アカウントは、以下に従う必要があります。

  • Unity Catalog 用に新規作成されている。
  • Unity Catalog 用にカスタム ID ポリシーが定義されている。
  • Unity Catalog でのみアクセスできる。
  • 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")