過去に以下のような記事を書きました。
例によってアドベントカレンダーということもあり、改めて現時点でのセットアップの方法をウォークスルーします。前回との大きな変更点は、後述するUnity Catalogの自動有効化です。こちらの挙動を理解した上で、要件に合わせたセットアップが必要となります。
スライドにもまとめました。
Unity Catalogとは
DatabricksはデータとAIのガバナンスを統合します。Databricksで取り扱う、データベースやテーブル、ファイルや機械学習モデルなどに対するガバナンスを集中管理することができます。
ガバナンス機能の中核となるのが、Unity Catalogです。データ資産、AI資産のアクセスコントロール、監査、リネージ(依存関係)、検索、監視、共有などの機能を提供します。
Unity Catalogの自動有効化
冒頭の記事を書いた頃は、Databricksアカウントレベルでの手動によるUnity Catalogの有効化が必要でした。しかし、2023/11以降はUnity Catalogが自動で有効化されるようになっています。
メリット
- 新規ワークスペースはUnity Catalog(UC)へのアクセスが事前設定されて提供されるので、アセットのガバナンスがデフォルトで確保されます。
- アカウント管理者に連絡する必要なしにワークスペースの利用を開始できます。
- Unity Catalogをベースとする最新のDatabricks機能にアクセスできます。
- Hiveサポートを含むUC以前のワークロードとの完全互換性があります。
自動有効化の概要
- ワークスペースを作成するとワークスペースでUCが自動で有効化されます。
- ワークスペース専用のカタログが自動で作成されます。
- ワークスペース管理者が上記カタログの所有者になります。
- 従来のHiveメタストアのサポートには変更はありません。
動作原理
-
あるリージョンに最初のワークスペースが作成されると、それとともに自動でメタストアも作成されます。自動作成されたメタストアには、ワークスペース分離を維持するために、ルートストレージやメタストア管理者は設定されません。
-
ワークスペースとともに、ワークスペース名のついた事前設定済みのカタログが提供されます。カタログはデフォルトでワークスペースにアタッチされており、アクセスを明示的に解放しない限り、当該ワークスペースからしかアクセスできないことを意味します。
-
ワークスペース管理者は上記のカタログの所有権を持ち、UCで新規カタログ、ロケーション、コネクション、その他のルートレベルのオブジェクトを作成することができます。
-
このカタログはワークスペース専用のストレージを使用します:
- Azure - DBFSに隣接する新規コンテナ
- AWS - ワークスペースストレージ配下で分離されたプレフィクス
-
ユーザーがカタログ/スキーマを指定せずに
CREATE TABLE myTable
を実行した場合、default
として設定されているカタログにテーブルが作成されます。これは、workspace default catalog
という新たなワークスペース設定で制御されます。従来のHiveメタストアを使い続けたい場合には、この設定を変更します。
コンポーネント | 以前のリリース | UC自動有効化 |
---|---|---|
Unity Catalog | ワークスペース作成後にアカウント管理者によって有効化 | ワークスペース作成時に自動で有効化 |
Hiveメタストア | それぞれのワークスペースで自身のHiveメタストアを保持 | それぞれのワークスペースで自身のHiveメタストアを保持 |
ID管理 | ワークスペースごとのID管理システム、ローカルグループ | アイデンティティフェデレーション, アカウントグループ (アカウント管理者、ワークスペース管理者によって作成) |
デフォルトのカタログ | Hive | UI/APIで設定可能 (UCカタログかHiveを選択可能) |
UCメタストアのストレージルートとメタストア管理者 | 必須 | オプション (分散ガバナンスをサポート) |
UCストレージ資格情報の作成 | アカウント管理者のみ | アカウント管理者、メタストア管理者、ワークスペース管理者、CREATE STORAGE CREDENTIAL権限を持つユーザー |
UCカタログ作成(コネクション、外部ロケーション、共有にも適用) | メタストア管理者、CREATE CATALOG権限を持つユーザー | メタストア管理者、ワークスペース管理者、CREATE CATALOG権限を持つユーザー |
注意点
UCが自動有効化されたワークスペースで新規にカタログを作成する際にはストレージの指定が必要です。
- 前提として、Unity Catalogではカタログやスキーマ(データベース)が使用するストレージ(S3バケットやADLSコンテナ)が必要となります。
- 新規にワークスペースを作成し、Unity Catalogが自動で有効化されると、自動で当該ワークスペース専用の(マネージド)ストレージが作成され、そのストレージを使用する当該ワークスペース専用のカタログが自動で作成されます。
- しかし、別途カタログを作成する場合には、上のステップで作成済みのストレージあるいは新規のストレージを使用するように明示的に指示する必要があります。ストレージを指定せずにカタログを作成しようとすると以下のエラーメッセージに遭遇します。
Metastore storage root URL does not exist. Please provide a storage location for the catalog (for example 'CREATE CATALOG myCatalog MANAGED LOCATION ''). Alternatively set up a metastore root storage location to provide a storage location for all catalogs in the metastore.
そして、ストレージを指定する際にはデータ分離ポリシーを検討する必要があります。
- ストレージは、メタストアレベル、カタログレベル、スキーマレベルで指定することができます。レベルに応じたデータ分離が行われます。
- テーブルのストレージロケーション(場所)は、どのレベルのストレージが設定されているのかによって、以下の順序で決定されます。
- スキーマにストレージロケーションが設定されている場合、テーブルはスキーマのストレージロケーションに格納されます。
- カタログにストレージロケーションが設定されている場合、テーブルはカタログのストレージロケーションに格納されます。
- カタログにもストレージロケーションが設定されていない場合、テーブルはメタストアのストレージロケーションに格納されます。
データ分離の観点では、メタストアのデフォルトロケーションにカタログ/スキーマを格納しないことを強くお勧めします。メタストアのデフォルトロケーションが存在すると、ストレージを指定しなくてもカタログやスキーマを作成することができ、データの分離が行えなくなります。そうではなく、カタログごとの個別のマネージドストレージロケーションを指定しましょう(これがカタログ内のスキーマ/テーブルのデフォルトロケーションになります)。
注意
上記の推奨事項はデータ分離の要件に基づくものです。サンドボックス環境などデータ分離の要件が弱い場合には、環境構築の容易さからメタストアでデフォルトストレージロケーションを指定することには合理性があると言えます。
Unity Catalogセットアップガイド
以下では、Databricksワークスペース作成完了後の手順をご説明します。
AWS シナリオ1: カタログレベルのデータ分離
ワークスペースを作成した時点でワークスペース専用のカタログは作成済みです。
カタログで使用するストレージも外部ロケーションとして設定済みです。
新規にカタログを追加します。
注意
CREATE CATALOG…MANAGED LOCATIONでも同様の操作が可能です。
作成済みの外部ロケーションを指定します。
必要に応じて権限やタグを設定します。
これで新規カタログが作成されました。
ワークスペース作成時に構成されたS3バケットに新規カタログのデータも格納されます。
S3バケット自体も分離したい場合は以下の手順を実施してください。
- S3バケットを作成し、当該S3バケットにアクセス可能なストレージ資格情報を作成します。
- ストレージ資格情報とS3バケットのパスを参照する外部ロケーションを作成します。
- カタログ作成時に新規に作成した外部ロケーションを選択します。
AWS シナリオ2: メタストアレベルのストレージ
カタログレベルでのデータ分離が不要の場合には、メタストアレベルのデフォルトストレージを設定することも可能です。詳細は注意点をご覧ください。
- カタログレベルでのデータ分離は強制できなくなります。
- メタストアレベルのデフォルトストレージとして使用するS3バケットを作成し、当該S3バケットにアクセス可能なストレージ資格情報を作成します。
- ストレージ資格情報とS3バケットのパスを参照する外部ロケーションを作成します。
- Databricksアカウントコンソールにアクセスします。
- UC自動有効化で作成されたメタストアにアクセスします。
- メタストアのストレージを設定するために、上で設定した外部ロケーションのS3バケットパスをセットします。これで、メタストアのデフォルトストレージが設定されます。
Azure シナリオ1: カタログレベルのデータ分離
ワークスペースを作成した時点でワークスペース専用のカタログは作成済みです。
カタログで使用するストレージも外部ロケーションとして設定済みです。
新規にカタログを追加します。
注意
CREATE CATALOG…MANAGED LOCATIONでも同様の操作が可能です。
作成済みの外部ロケーションを指定します。
必要に応じて権限やタグを設定します。
ADLSコンテナ自体も分離したい場合には以下の手順を実施してください。
-
ストレージアカウントとストレージコンテナを作成し、パス(例:
abfss://my-container-name@my-storage-account.dfs.core.windows.net/
)をメモしておきます。 - ストレージアカウントにアクセスできるマネージドIDを保持するAzure Databricksアクセスコネクタを作成します。(手順4までを実施)
- ストレージ資格情報を作成します。(10番までを実施)
- 外部ロケーションを作成します。
- カタログ作成時に、上で作成した外部ロケーションを選択します。
Azure シナリオ2: メタストアレベルのストレージ
カタログレベルでのデータ分離が不要の場合には、メタストアレベルのデフォルトストレージを設定することも可能です。詳細は注意点をご覧ください。
- カタログレベルでのデータ分離は強制できなくなります。
- メタストアのデフォルトストレージと指定使用するストレージアカウントとストレージコンテナを作成し、パス(例:
abfss://my-container-name@my-storage-account.dfs.core.windows.net/
)をメモしておきます。 - ストレージアカウントにアクセスできるマネージドIDを保持するAzure Databricksアクセスコネクタを作成します。(手順4までを実施)
- ストレージ資格情報を作成します。(10番までを実施)
- 外部ロケーションを作成します。
- Azure Databricksアカウントコンソールにアクセスします。
- UC自動有効化で作成されたメタストアにアクセスします。
- メタストアのストレージを設定するために、上で設定した外部ロケーションのADLS Gen2バケットパスをセットします。これで、メタストアのデフォルトストレージが設定されます。
参考資料
AWS
- Unity Catalog の設定と管理 | Databricks on AWS
- Unity Catalogのベストプラクティス|Databricks on AWS
- Unity Catalog でマネージドストレージロケーションを指定する |Databricks on AWS
- Unity Catalog を使用してクラウド ストレージへのアクセスを管理する |Databricks on AWS
Azure
- Unity Catalog の設定と管理 - Azure Databricks | Microsoft Learn
- Unity Catalog のベスト プラクティス - Azure Databricks | Microsoft Learn
- Unity Catalog のマネージド ストレージの場所を指定する - Azure Databricks | Microsoft Learn
- Unity カタログを使用してクラウド ストレージへのアクセスを管理する - Azure Databricks | Microsoft Learn