LoginSignup
0
0

More than 1 year has passed since last update.

DBFSとUnity Catalogのベストプラクティス

Last updated at Posted at 2022-09-10

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 FILEhive_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/に定義されている外部ロケーションがある場合、以下のコードはエラーとなります。

Python
spark.read.table("foo").filter("id IS NOT NULL").write.mode("overwrite").save("a/b/c")

上のロジックを2つのセルに分割した際にはエラーは起きません。

Python
df = spark.read.table("foo").filter("id IS NOT NULL")
Python
df.write.mode("overwrite").save("a/b/c")

Databricks 無料トライアル

Databricks 無料トライアル

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0