この記事では、Hive メタストア フェデレーションについて説明します。これは、Unity カタログが Hive メタストアに格納されているテーブルを管理できるようにする機能です。 外部 Hive メタストアまたは従来の内部 Azure Databricks Hive メタストアをフェデレーションできます。
Hive メタストア フェデレーションは、次のユース ケースに使用できます。
Unity カタログへの移行パスの手順として、コードを調整せずに増分移行を有効にします。一部のワークロードでは、Hive メタストアに登録されているデータが引き続き使用され、他のワークロードは移行されます。
フェデレーション内部 Hive メタストアでは読み取りと書き込みの両方のワークロードが許可されるため、このユース ケースは、従来の内部 Azure Databricks Hive メタストアを現在使用している組織に最も適しています。
Unity カタログに登録されているデータと共に Hive メタストア内のデータを保持する必要がある組織に対して、より長期的なハイブリッド モデルを提供するため。
このユース ケースは、外部 Hive メタストアを使用する組織に最も適しています。これらの Hive メタストアの外部カタログは読み取り専用であるためです。
Hive メタストア フェデレーションに関する概要
Hive メタストア フェデレーションでは、Azure Databricks ワークスペースから Hive メタストアへの接続を作成し、Unity カタログは Hive メタストアをクロールして外部カタログ ( フェデレーション カタログとも呼ばれます) を設定します。これにより、組織は Unity カタログ内の Hive メタストア テーブルを操作して、一元化されたアクセス制御、系列、検索などを提供できます。
Azure Databricks ワークスペースの外部にあるフェデレーション Hive メタストアでは、Unity カタログを使用した読み取りが許可されます。 内部 Hive メタストアでは、読み取りと書き込みが可能になり、書き込み時に Hive メタストア メタデータと Unity カタログ メタデータが更新されます。
フェデレーション Hive メタストア内の外部テーブルに対してクエリを実行すると、Unity カタログはガバナンス レイヤーを提供し、アクセス制御チェックや監査などの機能を実行しますが、クエリは Hive メタストア セマンティクスを使用して実行されます。 たとえば、ユーザーが外部カタログの Parquet 形式で格納されているテーブルに対してクエリを実行する場合は、次のようになります。
- Unity カタログは、ユーザーがテーブルにアクセスできるかどうかを確認し、クエリの系列を推論します。
- クエリ自体は、基になる Hive メタストアに対して実行され、そこに格納されている最新のメタデータとパーティション情報を利用します。
Hive メタストア フェデレーションは、Unity カタログ外部テーブルの使用とどのように比較されますか?
Unity Catalog には 、外部テーブルを作成し、任意のクラウド ストレージの場所に既に存在するデータを取得し、それを Unity カタログにテーブルとして登録する機能があります。 このセクションでは、フェデレーション Hive メタストアの外部テーブルと異種テーブルの違いについて説明します。
両方のテーブルの種類には、次のプロパティがあります。
- クラウド ストレージ内の任意の場所をテーブルとして登録するために使用できます。
- Unity カタログのアクセス許可ときめ細かいアクセス制御を適用できます。
- それらを参照するクエリの系列で表示できます。
フェデレーション Hive メタストアの外部テーブルには、次のプロパティがあります。
- Hive メタストアのクロールに基づいて自動的に検出されます。 Hive メタストアでテーブルが作成されるとすぐに、テーブルが表示され、Unity カタログの外部カタログでクエリを実行できるようになります。
- Hive SerDes やパーティションなどの Hive セマンティクスを使用してテーブルを定義できるようにします。
- 外部カタログ内の他のテーブルと重複するパスをテーブルに含めることを許可します。
- DBFS ルートの場所にテーブルを配置できるようにします。
- Hive メタストアで定義されているビューを含めます。
このように、フェデレーション Hive メタストア内の外部テーブルは、Hive メタストアとの下位互換性を提供すると考えることができます。これにより、ワークロードは Hive 専用セマンティクスを使用できますが、Unity Catalog によって提供されるガバナンスを使用できます。
ただし、一部の Unity カタログ機能は、次のような外部テーブルでは使用できません。
- 予測の最適化など、Unity カタログのマネージド テーブルでのみ使用できる機能。
- ベクター検索、デルタシェアリング、レイクハウス監視、オンラインテーブル。
- 機能ストアの作成、モデル サービスの作成、機能スペックの作成、モデルのログ記録、バッチ スコアリングなど、一部の機能ストア機能。
Hive メタストアと Unity カタログの両方が外部テーブルのクエリ パス上にあるため、Unity カタログまたは Hive メタストアのワークロードよりもパフォーマンスがわずかに低下する可能性があります。
サポートされている機能の詳細については、「 要件と機能のサポート」を参照してください。
フェデレーション Hive メタストアの外部カタログに書き込むとはどういう意味ですか?
書き込みは、外部 Hive メタストアではなく、フェデレーション内部 Hive メタストアでのみサポートされます。
フェデレーション メタストアへの書き込みには、次の 2 種類があります。
CREATE TABLE
、ALTER TABLE
、DROP TABLE
などの DDL 操作。DDL 操作は、基になる Hive メタストアに同期的に反映されます。 たとえば、
CREATE TABLE
ステートメントを実行すると、Hive メタストアと外部カタログの両方にテーブルが作成されます。Warnung
これは、
DROP
コマンドが Hive メタストアに反映されることを意味します。 たとえば、DROP SCHEMA mySchema CASCADE
は、Hive メタストアがUNDROP
をサポートしていないため、UNDROP
オプションなしで、基になる Hive メタストア スキーマ内のすべてのテーブルを削除します。INSERT
、UPDATE
、DELETE
などの DML 操作。DML 操作は、基になる Hive メタストア テーブルにも同期的に反映されます。 たとえば、
INSERT INTO
を実行すると、Hive メタストアのテーブルにレコードが追加されます。書き込みサポートは、Hive メタストアから Unity カタログへの移行中にシームレスに移行できるようにするための鍵です。 Unity カタログへの移行中に Hive メタストア フェデレーションを使用する方法を参照してください。
Hive メタストア フェデレーションを設定するにはどうすればよいですか。
Hive メタストア フェデレーションを設定するには、次の操作を行います。
Hive メタストアにアクセスするためのパスと資格情報を指定する 接続 を Unity カタログに作成します。
Hive メタストア フェデレーションでは、この接続を使用して Hive メタストアをクロールします。 ほとんどのデータベース システムでは、ユーザー名とパスワードを指定します。 従来の内部 Azure Databricks ワークスペース Hive メタストアへの接続では、Hive メタストア フェデレーションが承認を処理します。
Hive メタストアに登録されているテーブルへのパスの ストレージ資格情報 と 外部の場所 を Unity カタログに作成します。
外部の場所には、パスと、それらのパスにアクセスするために必要な ストレージ資格情報 が含まれています。 ストレージ資格情報は、クラウド ストレージにアクセスするための資格情報 (Azure マネージド ID など) を指定する Unity カタログのセキュリティ保護可能なオブジェクトです。 外部の場所を作成するために選択したワークフローによっては、外部の場所を作成する前にストレージ資格情報の作成が必要になる場合があります。
手順 1 で作成した接続を使用して、Unity カタログに外部カタログを作成します。
これは、ワークスペース ユーザーとワークフローが Unity カタログを使用して Hive メタストア テーブルを操作するために使用するカタログです。 外部カタログを作成すると、Unity カタログに Hive メタストアに登録されているテーブルが設定されます。
Unity カタログを使用して、外部カタログ内のテーブルに権限を付与します。
Unity カタログの行フィルターと列フィルターを使用して、きめ細かなアクセス制御を行うこともできます。
データのクエリを開始します。
Unity カタログを使用した外部テーブルへのアクセスは、外部 Hive メタストアの場合は読み取り専用で、内部 Hive メタストアの場合は読み取りおよび書き込み可能です。
内部 Hive メタストアと外部 Hive メタストアの場合、Unity カタログでは、Hive メタストアでテーブル メタデータが変更されると、テーブル メタデータが継続的に更新されます。 内部 Hive メタストアの場合、外部カタログからコミットされた新しいテーブルとテーブルの更新が Hive メタストアに書き戻され、Unity カタログと Hive メタストア カタログ間の完全な相互運用性が維持されます。
詳細な手順については、以下を参照してください。
Unity カタログへの移行中に Hive メタストア フェデレーションを使用する方法
Hive メタストア フェデレーションを使用すると、チームとワークロード間の調整の必要性を減らすことで、Unity カタログに段階的に移行できます。 特に、Azure Databricks ワークスペースの内部 Hive メタストアから移行する場合、Hive メタストアと Unity カタログ メタストアの両方に対して読み取りと書き込みを行う機能は、移行中に "ミラー化された" メタストアを維持できることを意味し、次の利点があります。
- 外部カタログに対して実行されるワークロードは Hive メタストア互換モードで実行されるため、移行中のコード適応のコストが削減されます。
- 各ワークロードは、移行期間中に Hive メタストアと Unity カタログの両方でデータを使用できるようになるので、相互に依存関係を持つワークロード間で調整する必要性が軽減されるため、他のワークロードとは別に移行することを選択できます。
このセクションでは、移行を容易にする Hive メタストア フェデレーションを使用して、Azure Databricks ワークスペースの内部レガシ Hive メタストアを Unity カタログに移行するための一般的なワークフローについて説明します。 外部 Hive メタストアの移行には適用されません。 外部 Hive メタストアの外部カタログは書き込みをサポートしていません。
手順 1: 内部 Hive メタストアをフェデレーションする
この手順では、Unity カタログで Hive メタストアをミラーリングする外部カタログを作成します。 これを hms_in_uc
と呼びましょう。
注
フェデレーション プロセスの一環として、クラウド ストレージ内のデータへのアクセスを提供する外部の場所を設定します。 一部のワークロードがレガシ アクセス メカニズムを使用してデータに対してクエリを実行し、その他のワークロードが Unity カタログ内の同じデータに対してクエリを実行している移行シナリオでは、Unity カタログで管理される外部の場所のアクセス制御によって、従来のワークロードが Unity カタログ対応コンピューティングからストレージへのパスにアクセスできなくなる可能性があります。 これらの外部の場所で "フォールバック モード" を有効にして、レガシ ワークロード用に定義されたクラスターまたはノートブックスコープの資格情報にフォールバックできます。 その後、移行が完了したら、フォールバック モードをオフにします。 「フォールバック モードとは」を参照してください。
詳細については、 レガシ ワークスペースの Hive メタストアに対する Hive メタストア フェデレーションの有効化に関するページを参照してください。
手順 2. Unity カタログで外部カタログに対して新しいワークロードを実行する
外部カタログがある場合は、SQL アナリストとデータ サイエンス コンシューマーにアクセス権を付与し、それを指す新しいワークロードの開発を開始できます。 新しいワークロードは、アクセス制御、検索、系列など、Unity カタログの追加機能セットの恩恵を受けます。
この手順では、通常、次の操作を行います。
- Unity カタログ互換コンピューティング (つまり、標準または専用のコンピューティング アクセス モード、SQL ウェアハウス、またはサーバーレス コンピューティング) を選択します。 要件と機能のサポートを参照してください。
- 外部カタログをコンピューティング リソースの 既定のカタログ にするか、コードの先頭に
USE CATALOG hms_in_uc
を追加します。 外部カタログのスキーマとテーブル名は Hive メタストア内のスキーマとテーブル名の正確なミラーであるため、外部カタログの参照が開始されます。
ステップ 3。 既存のジョブを外部カタログで実行用に移行する
既存のジョブを移行して外部カタログにクエリを実行するには:
- クラスター自体にプロパティを設定するか、コードの先頭に
hms_in_uc
を追加して、ジョブ クラスターの既定のカタログをUSE CATALOG hms_in_uc
に変更します。 - ジョブを標準または専用アクセス モードのコンピューティングに切り替え、Hive メタストア フェデレーションをサポートする Databricks Runtime バージョンのいずれかにアップグレードします。 要件と機能のサポートを参照してください。
- Azure Databricks 管理者に、
hms_in_uc
内のデータ オブジェクトと、ジョブがアクセスするすべてのクラウド ストレージ パス (Unity カタログの外部の場所に含まれる) に対する適切な Unity カタログ特権を付与するように依頼します。 「Unity Catalog の特権の管理」を参照してください。
手順 4. Hive メタストアへの直接アクセスを無効にする
外部カタログのクエリを実行するためにすべてのワークロードを移行すると、Hive メタストアは不要になります。
Hive メタストアへの直接アクセスを無効にします。
「Azure Databricks ワークスペースで使用される Hive メタストアへのアクセスを無効にする」を参照してください。
コンピューティング ポリシーと [ユーザー分離ワークスペースの適用] 設定を使用して、テーブル アクセス制御をバイパスするクラスター (分離共有アクセス モードまたは従来のカスタム クラスターの種類を使用しないクラスター) を ユーザー が作成および使用できないようにします。
「コンピューティング構成」および「ワークスペースにユーザー分離クラスターの種類を適用する」を参照してください。
フェデレーション カタログをワークスペースの既定のカタログにします。
「既定のカタログを管理する」を参照してください。
よく寄せられる質問
次のセクションでは、Hive メタストア フェデレーションの詳細について説明します。
フォールバック モードとは
フォールバック モード は、Unity カタログへの移行中に Unity カタログのアクセス許可チェックをバイパスするために使用できる外部の場所の設定です。 設定すると、まだ移行されていないワークロードがセットアップ フェーズ中に影響を受けなくなります。
Unity カタログでは、外部の場所を使用してクラウド ストレージにアクセスできます。これは、クラウド ストレージ アカウントにアクセスするためのパスと資格情報を定義するセキュリティ保護可能なオブジェクトです。 READ FILES
などのアクセス許可を発行して、パスを使用できるユーザーを管理できます。 移行プロセス中の課題の 1 つは、たとえば、パスを参照する既存の未移行のワークロードがある場合など、Unity カタログがパスへのすべてのアクセスの管理をすぐに開始しないようにすることです。
フォールバック モードを使用すると、外部の場所に対する厳密な強制 Unity カタログ のアクセス制御を遅らせることができます。 フォールバック モードが有効になっている場合、パスにアクセスするワークロードは最初に Unity カタログのアクセス許可に対してチェックされ、失敗した場合は、インスタンス プロファイルや Apache Spark 構成プロパティなどのクラスターまたはノートブックスコープの資格情報の使用にフォールバックします。 これにより、既存のワークロードで現在の資格情報を引き続き使用できます。
フォールバック モードは、移行中にのみ使用することを目的としています。 すべてのワークロードが移行され、Unity カタログのアクセス制御を適用する準備ができたら、オフにする必要があります。
フォールバックの使用に関するクエリ監査ログ
次のクエリを使用して、外部の場所へのアクセスが過去 30 日間にフォールバック モードを使用したかどうかを確認します。 アカウントにフォールバック モード アクセスがない場合は、フォールバック モードをオフにすることをお勧めします。
SELECT event_time, user_identity, action_name, request_params, response, identity_metadata
FROM system.access.audit
WHERE
request_params.fallback_enabled = 'true' AND
request_params.path LIKE '%some-path%' AND
event_time >= current_date() - INTERVAL 30 DAYS
LIMIT 10
承認されたパスとは
Hive メタストア フェデレーションによってサポートされる外部カタログを作成すると、Hive メタストア テーブルが格納されているクラウド ストレージへの 承認されたパス を指定するように求められます。 Hive メタストア フェデレーションを使用してアクセスするテーブルは、これらのパスでカバーされている必要があります。 Databricks では、承認されたパスを多数のテーブルに共通するサブパスにすることをお勧めします。 たとえば、 abfss://container@storageaccount.dfs.core.windows.net/bucket/table1
、 ./bucket/table2
、 ./bucket/table3
にテーブルがある場合は、承認されたパスとして abfss://container@storageaccount.dfs.core.windows.net/bucket/
を指定する必要があります。
UCX を使用すると、Hive メタストアに存在するパスを識別するのに役立ちます。
承認されたパスは、Hive メタストア フェデレーションによってサポートされる外部カタログにセキュリティの追加レイヤーを追加します。 カタログ所有者は、フェデレーションを使用してユーザーがアクセスできるデータにガードレールを適用できます。 これは、Hive メタストアがユーザーにメタデータの更新やテーブルの場所を任意の場所に変更することを許可する場合に便利です。そうでなければ、その更新は外部カタログに同期されることになります。 このシナリオでは、ユーザーがアクセスできない新しい場所を指すように、既にアクセスできるテーブルを再定義する可能性があります。
UCX を使用して Hive メタストアをフェデレーションできますか?
UCX は、Azure Databricks ワークスペースを Unity カタログに移行するための Databricks Labs プロジェクトで、Hive メタストア フェデレーションを有効にするためのユーティリティが含まれています。
enable-hms-federation
create-federated-catalog
GitHub のプロジェクト readme を参照してください。 UCX の概要については、「 UCX ユーティリティを使用してワークスペースを Unity カタログにアップグレードする」を参照してください。
要件と機能のサポート
次の表に、Hive メタストア フェデレーションでサポートされるサービスと機能を示します。 場合によっては、サポートされていないサービスまたは機能も一覧表示されます。 これらのテーブルでは、"HMS" は Hive メタストアを表します。
カテゴリ | サポートされています | サポートされていません |
---|---|---|
メタストアーズ |
|
|
オペレーション |
|
|
Hive メタストアのデータ資産 |
|
|
Storage |
|
|
コンピューティングの種類 |
|
分離クラスターなし |
コンピューティング バージョン |
|
|
Unity カタログの機能 |
|
|
シャトー複製の使用
Von Bedeutung
浅い複製のサポートは パブリック プレビュー段階です。
Hive メタストア フェデレーションでは、Hive メタストアに登録されているテーブルからの浅いクローンの作成がサポートされています。次の注意事項があります。
Hive メタストア フェデレーション カタログからシャトー複製を読み取ると、そのクローンは
DEGRADED
プロビジョニング状態になります。 これは、浅いクローンが Hive アクセス許可モデルを使用していることを示しています。この場合、浅い複製テーブルから読み取るユーザーは、浅い複製とベース テーブルの両方に対してSELECT
特権を持つ必要があります。簡易クローンを Unity カタログアクセス許可モデルと一致するようにアップグレードするには、テーブル所有者が
REPAIR TABLE <table> SYNC METADATA
実行する必要があります。 コマンドを実行すると、テーブルのプロビジョニング状態がACTIVE
に変わり、その後 Unity カタログによってアクセス許可が制御されます。 コマンドが Unity Catalog をサポートするコンピューティング上で実行される限り、シャロー クローン上での後続の読み取りでは、シャロー クローン自体のSELECT
のみ必要になります。DBFS で作成された浅い複製、または DBFS にマウントされているテーブルに基づく浅い複製はサポートされていません。
制限事項
- テーブル ファイルがフェデレーション テーブルの場所の外部に格納されているフェデレーション テーブルに対してクエリを実行することはできません。 これには、テーブルの場所の外部にパーティションが格納されているテーブル、または avro テーブルの場合は、
avro.schema.url
テーブル プロパティを使用してスキーマが参照されるテーブルが含まれる場合があります。 このようなテーブルに対してクエリを実行すると、UNAUTHORIZED_ACCESS
またはAccessDeniedException
例外がスローされる可能性があります。