次の方法で共有


DBFS と Unity カタログのベスト プラクティス

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

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

Unity カタログ対応ワークスペースでは 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 カタログの外部の場所で DBFS を使用しない

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

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

Unity Catalog は、マネージド テーブルやボリュームのデータ ファイルを保存するために、マネージド ストレージ ロケーションを使用します。

Databricks では、マネージド ストレージの場所に対して次のことをお勧めします。

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

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

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

Unity カタログの外部の場所として DBFS ルートとして使用されるストレージ アカウントを読み込むべきではありません。

Unity カタログ のファイルシステム アクセスではクラスター構成が無視される

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

複数の経路アクセスにおける制限

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

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

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