DBFS と Unity Catalog に関するベスト プラクティス

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

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

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

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

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

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

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

DBFS は共有アクセス モードでどのように機能しますか?

共有アクセス モードでは Unity Catalog データガバナンスと 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 カタログで管理されるストレージ を保護する

各 Unity Catalog メタストアには、Databricks アカウント管理者によって構成されたオブジェクト ストレージ アカウントがあります。 Unity Catalog は、この場所を使用して、 Unity Catalogマネージド テーブルのすべてのデータとメタデータを格納します。

Unity Catalog メタストアに使用されるストレージ アカウントは、次の条件を満たしている必要があります。

  • Unity Catalog用に新規作成されます。

  • Unity Catalogに対してカスタム ID ポリシーを定義しています。

  • Unity Catalogでのみアクセスできます。

  • Unity Catalog用に作成されたアイデンティティアクセスポリシーを使用してのみアクセスできます。

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

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

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

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

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

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

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

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

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")