Best practices for DBFS and Unity Catalog | Databricks on AWS [2022/8/25時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
Unity Catalogは、DBFSとは完全に異なるデータガバナンスアプローチをとっている新たな設定とコンセプトを数多く導入します。本書では、Unity Catalogの外部ロケーションとDBFSの取り扱いにおける幾つかのベストプラクティスを説明します。
Unity Catalogが有効化されたDatabricksワークスペースにおけるほとんどのユースケースにおいて、DBFSとマウントされたクラウドオブジェクトストレージの使用はお勧めしません。Unity Catalogにファイルや格納データを移行しない場合、Unity CatalogとDBFSを組み合わせて使用することはお勧めしません。
Unity Catalogが有効化されたワークスペースではDBFSはどのように使われますか?
DBFSルートは、ワークスペーススコープのhive_metastore
でのマネージドテーブルの作成を含む、Databricksワークスペースにおける数多くのアクションに関係するファイルを格納するデフォルトのロケーションです。hive_metastore
のテーブルに対して実行されるアクションは、DBFSによって管理されるデータとストレージ資格情報を含むレガシーなデータアクセスパターンを使用します。
シングルユーザーアクセスモードでDBFSはどのように動作しますか?
シングルユーザーアクセスモードが設定されたクラスターは、DBFSルートとマウントされたデータの全てのファイルを含むDBFSに対してフルアクセスを持ちます。FUSEはこのアクセスモードでのみ使用でき、Unity Catalogデータセットに対するアクセスを必要とするMLワークロードで選択することができます。
DBFSとUnity Catalogによって管理されるデータへのアクセスを必要とするプロダクションワークロードにおいては、スケジュールされたジョブのサービスプリンシパルとシングルユーザーアクセスモードを使用することをお勧めします。
共有アクセスモードでDBFSはどのように動作しますか?
共有アクセスモードは、Unity CatalogのデータガバナンスとDatabricksのレガシーなテーブルACLを組み合わせたものです。hive_metastore
のデータアクセスは、明示的に許可された権限を持つユーザーにのみ限定されます。
DBFSを用いて直接ファイルを操作するには、ANY FILE
権限が許可されている必要があります。ANY FILE
はhive_metastore
のレガシーテーブルACLのバイパスを可能にし、DBFSによって管理される全てのデータにアクセスできるので、この権限を付与する際には注意することをお勧めします。
共有アクセスモードではFUSEはサポートされません。
シングルユーザーアクセスモードでUnity Catalogクラスターを起動してDBFSを使用してください
外部ストレージに保存されているinitスクリプト、設定、ライブラリに対してはDBFSマウントを使用することをお勧めします。この挙動は共有アクセスモードではサポートされていません。
Unity Catalogの外部ロケーションでDBFSを使用しないでください
Unity Catalog(UC)は、管理されたオブジェクトストレージのディレクトリの権限を特定するために、完全なクラウドURIパスを用いることで外部ロケーションのデータへのアクセスを保護します。DBFSマウントは、Unity Catalogを完全にバイパスする全く異なるデータアクセスモデルを使用しています。DBFSマウントとUCの外部ボリュームでクラウドオブジェクトストレージのボリュームを再利用しないことをお勧めします。
Unity Catalogマネージドストレージの保護
それぞれのUnity Catalogのメタストアには、Databricksアカウント管理者によって設定されたオブジェクトストレージのアカウントが割り当てられます。Unity Catalogは、Unity Catalogが管理するテーブルの全てのデータとメタデータをこの場所に格納します。
Unity Catalogメタストアのストレージアカウントは、
- Unity Catalog用に新規に作成される必要があります。
- Unity Catalogによって定義されたカスタムアイデンティティポリシーを持つ必要があります。
- Unity Catalogのみによってアクセスされるべきです。
- Unity Catalog向けに作成されたアイデンティティアクセスポリシーを用いてアクセスされるべきです。
既存データを外部ロケーションに追加する
外部ロケーションを用いてUnity Catalogに既存のストレージアカウントをロードすることができます。セキュリティを最大化するために、全てのストレージ資格情報とアクセスパターンを削除したのちに、ストレージアカウントを外部ロケーションにロードすることをお勧めします。
DBFSルートとして使用されているストレージアカウントを、Unity Catalogの外部ロケーションとしてロードすることは絶対にやめてください。
Unity Catalogのファイルシステムアクセスによってクラスター設定は無視されます
Unity Catalogはクラスターのファイルシステム設定を考慮しません。これは、クラウドオブジェクトストレージに対するカスタム挙動のためのHadoopファイルシステム設定は、Unity Catalogを用いてアクセスする際には動作しないことを意味します。
複数のパスアクセスに関する制限
Unity CatalogとDBFSを一緒に使用することはできますが、異なるアクセス手段を用いた同じコマンドあるいはノートブックセルで、同じパスや親子関係を共有するパスを参照することはできません。
例えば、ロケーションa/b/c
にある、hive_metastore
に定義されているサンプルのテーブルfoo
と、Unity Catalogで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")