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

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

Databricks では、Unity Catalog対応のデータブリック ワークスペースのほとんどのユースケースで、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 では、この特権を付与する場合は注意が必要です。

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

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

Unity Catalogで管理されるストレージを保護する

管理対象テーブルとボリュームのデータ ファイルを保存するために管理対象ストレージの場所を使用する 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 を一緒に使用できますが、親子関係が等しいパスまたは親子関係を共有するパスを、異なるアクセス方法を使用して同じコマンドまたはノートブック セルで参照することはできません。

たとえば、外部テーブル 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")