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へのフル アクセス権を持ちます。
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 を一緒に使用できますが、親子関係が等しいパスまたは親子関係を共有するパスを、異なるアクセス方法を使用して同じコマンドまたはノートブック セルで参照することはできません。
たとえば、外部テーブル foo
が hive_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")