AWS GlueメタストアのHive metastoreフェデレーションを有効にする
この記事では、組織がUnity Catalogを使用してHiveメタストアテーブルを操作できるように、AWS Glueメタストアをフェデレーションする方法について説明します。
Hive メタストアフェデレーションの概要については、Hiveメタストアフェデレーション:Hiveメタストアに登録されているテーブルをUnity Catalog で管理できるようにしますをご覧ください。
始める前に
Hive metastore フェデレーションでサポートされているサービスと機能の一覧 (要件と機能のサポート) を確認します。
以下の各ステップの具体的な要件を示します。
ステップ 1: Unity CatalogをAWS Glue Hive metastoreに接続する
AWS GlueのHiveメタストアを Databricksに接続するには、次のことを行う必要があります。
- AWS Glue リソースへの一時的なアクセスをDatabricksに付与する信頼ポリシーを用いて IAMロールを作成します。
 - サービス資格 情報 を作成する 登録する IAMロール in Unity Catalog. サービス資格情報は、長期的なクラウド資格情報をカプセル化する Unity Catalog セキュリティ保護可能なオブジェクトです。
 - DatabricksからAWS glueカタログへの Unity Catalogの 接続 を作成します。接続は、データベース システムにアクセスするためのパスと資格情報を指定する Unity Catalog のセキュリティ保護可能なオブジェクトです。
 
必要条件
次のものが必要です。
- AWS Glue カタログへのアクセスを許可する IAMロールを作成する機能。
 - AWS Glue カタログを含む AWS アカウント のリージョンとアカウント ID。
 - Unity Catalog メタストアに対する 
CREATE SERVICE CREDENTIAL特権とCREATE CONNECTION特権。メタストア管理者は、 デフォルト。 
IAMロールとサービス資格情報を作成する
ステップ 1:IAM ロールを作成する の手順を使用して、AWS GlueリソースへのDatabricksの一時的なアクセスを許可するIAMロールを作成します 。この IAMロールは自己仮定である必要があるため、このプロセスには次の 3 つの手順が必要です。
これらの手順に含まれている AWS Glue のサンプル IAM ポリシーを使用する必要があります。自己引き受けの役割要件については、これらの手順でも説明されています。
接続を作成する
接続を作成するには、カタログエクスプローラーを使用するか、Databricksノートブックまたは Databricks SQLクエリーエディタで CREATE CONNECTION SQLコマンドを使用できます。
Databricks REST API または Databricks CLI を使用して接続を作成することもできます。 POST /api/2.1/unity-catalog/connections および Unity Catalog コマンドを参照してください。
- Catalog Explorer
 - SQL
 
- 
Databricks ワークスペースで、
カタログ をクリックします。
 - 
クイック アクセス ページで、 データの追加 > 接続の追加 をクリックします。
 - 
接続のセットアップ ウィザードの [接続の基本 ] ページで、わかりやすい 接続名 を入力します。
 - 
接続タイプ に Hive metastore を、 メタストア・タイプ に AWS Glue を選択します。
 - 
(オプション)コメントを追加します。
 - 
次へ をクリックします。
 - 
[ 接続の詳細] ページで、ホスト データベースに次のように入力します。
- AWS リージョン : AWS Glue カタログを保持する AWS アカウントのリージョン。
 - AWS アカウント ID : アカウントAWS アカウントのアカウント ID。
 - 資格情報: 前の手順で作成したサービス資格情報を選択します。
 
(オプション)データベース・インスタンスが CA 署名付きサーバ証明書を使用しない場合は、 サーバ証明書を信頼する を選択します。
 - 
接続の作成 をクリックします。
 - 
カタログの基本 ページで、フォーリンカタログの名前を入力します。
 - 
承認パス で、カタログからアクセスできるクラウドストレージパスを選択します。これらのパスに該当するテーブルのみをフォーリンカタログで照会できます。 パスは外部ロケーションでカバーされている必要があります。 詳細については、承認されたパスとはを参照してください。
 - 
[ カタログを作成 ] をクリックします。
 - 
アクセス ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。 すべてのワークスペースにアクセス権がある を選択するか、 ワークスペースに割り当て をクリックし、ワークスペースを選択して 割り当て をクリックします。
 - 
カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を追加します。テキスト ボックスにユーザーまたはグループの入力を開始し、返された結果でユーザーまたはグループをクリックします。
 - 
カタログに対する 権限 を付与します。
- 
付与 をクリックします。
 - 
カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。テキスト ボックスにユーザーまたはグループの入力を開始し、返された結果でユーザーまたはグループをクリックします。
 - 
各ユーザーまたはグループに付与する 権限プリセット を選択します。デフォルトでは、すべてのアカウントユーザーに
BROWSE権限が付与されます。- ドロップダウンメニューから「 データリーダー」 を選択して、カタログ内のオブジェクトに対する 
read権限を付与します。 - ドロップダウンメニューから「 データエディタ 」を選択して、カタログ内のオブジェクトに対する 
read権限とmodify権限を付与します。 - 付与する権限を手動で選択します。
 
 - ドロップダウンメニューから「 データリーダー」 を選択して、カタログ内のオブジェクトに対する 
 - 
付与 をクリックします。
 
 - 
 - 
次へ をクリックします。
 - 
[ メタデータ ] ページで、必要に応じてタグをキーと値のペアとして指定します。詳細については、「セキュリティ 保護可能なオブジェクト Unity Catalog タグを適用する」を参照してください。
 - 
(オプション)コメントを追加します。
 - 
保存 をクリックします。
 
ノートブックまたはSQLクエリーエディターで次のコマンドを実行します。
CREATE CONNECTION <connection-name> TYPE glue
OPTIONS (
  aws_region '<aws-region-ID>',
  aws_account_id '<aws-account-ID>',
  credential '<service-credential-ID>'
);
ステップ 2: 外部ロケーションを作成する Hive metastore内のデータ用
この手順では、お使いのAWS Glue Hiveメタストアに登録されているクラウドストレージロケーションへのアクセスを制御するために、Unity Catalogの外部ロケーションを設定します。
外部ロケーションは、ストレージ資格情報をクラウドストレージコンテナパスに関連付けるUnity Catalogセキュリティ保護可能なオブジェクトです。
外部ロケーションを作成するためのオプション
DatabricksにおいてUnity Catalogで外部ロケーションを作成するために推奨されるプロセスは、状況によって異なります。
- Unity Catalogで作成されたストレージ認証情報がない場合は、IAMロールとストレージ認証情報を作成するAWS CloudFormation テンプレートを使用して外部ロケーションを作成できます。「 AWS S3 バケットにアクセスするストレージ認証情報を作成する」の手順に従います。
 - Unity Catalogで作成されたストレージ資格情報が既にある場合は、 Catalog Explorer または SQLを使用して外部ロケーションを手動で作成します。
 
外部ロケーションでフォールバック モードを有効にする
Unity Catalogで外部ロケーションを作成するとすぐに、その外部ロケーションによって表されるパスへのアクセスは、Unity Catalog対応コンピュートでクエリを実行するときにUnity Catalog権限によって強制されます。これにより、パスにアクセスするための適切な Unity Catalog アクセス許可を持たない既存のワークロードが中断される可能性があります。
外部ロケーションがフォールバックモードの場合、システムはまず、そのロケーションに対するクエリプリンシパルの Unity Catalog アクセス許可を確認し、それが成功しない場合は、インスタンスプロファイルや Apache Spark 設定プロパティなど、既存のクラスターまたはノートブックスコープの認証情報を使用してフォールバックし、既存のワークロードが中断なく実行し続けるようにします。
フォールバックモードは、レガシーワークロードの移行中に便利です。Unity Catalogアクセス許可を使用して正常に実行するようにワークロードを更新したら、フォールバック モードを無効にして、従来のクラスター スコープの資格情報がUnity Catalog データ ガバナンスのバイパスに使用されないようにする必要があります。
フォールバック モードは、カタログエクスプローラ または Unity Catalog 外部ロケーション REST APIを使用して有効にできます。
必要な権限 : 外部ロケーションの所有者。
- Catalog Explorer
 - API
 
- Databricks ワークスペースで、
カタログ をクリックします。
 - クイック アクセス ページで、 外部データ > をクリックします。
 - 更新する外部ロケーションを選択します。
 - フォールバック モード トグルをオンにし、 有効にする をクリックして確定します。
 
次の curl の例は、外部ロケーションの作成時と既存の外部ロケーションの更新時にフォールバック モードを有効にする方法を示しています。
新しい外部ロケーションの作成:
curl -X POST -H 'Authorization: Bearer <token>' \
https://<workspace-URL>/api/2.1/unity-catalog/external-locations \
--data
'{
  "name": "fallback_mode_enabled_external_location",
  "url": "s3://external_location_bucket/url",
  "credential_name": "external_location_credential",
  "fallback": true
  "skip_validation": true
}'
外部ロケーションの更新:
curl -X PATCH \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
https://<workspace-URL>/api/2.1/unity-catalog/external-locations/<external-location-name> \
--data
 '{
   "comment": "fallback mode enabled",
   "fallback": true
  }'
ステップ 3: フォーリンカタログを作成する
カタログエクスプローラ の接続作成ウィザードを使用してステップ 1 を完了した場合は、この手順をすでに完了している可能性があります。ステップ 1 の完了時にフォーリンカタログを作成しなかった場合、または SQL を使用して接続を作成した場合は、このセクションの指示に従う必要があります。
このステップでは、ステップ 1 で作成した接続を使用して、ステップ 2 で作成した外部ロケーションを指すフォーリンカタログを Unity Catalog で作成します。 フォーリンカタログ は、外部データ システム内のデータベースまたはカタログをミラーリングする Unity Catalog 内のセキュリティ保護可能なオブジェクトであり、 Databricks ワークスペース内のそのデータに対してクエリを実行し、アクセスは Unity Catalogによって管理されます。 この場合、ミラーリングされたカタログは、 Hive メタストアに登録されているデータです。
ユーザーまたはワークフローがフォーリンカタログと対話するたびに、メタデータは Hive メタストアから同期されます。
必要条件
権限要件 :
フォーリンカタログを作成するには:
- Unity Catalog メタストアに対する 
CREATE CATALOG特権。 - 接続の所有権または接続に対する 
CREATE FOREIGN CATALOG特権のいずれか。 - フォーリンカタログに許可されたパスを入力するには、それらのパスをカバーする外部ロケーションに対する 
CREATE FOREIGN SECURABLE権限が必要です。 外部ロケーションの所有者は、デフォルトでこの権限を持ちます。 
フォーリンカタログを操作するには:
- カタログの所有権または 
USE CATALOG 
コンピュートの要件 :
- カタログエクスプローラを使用してカタログを作成するには、コンピュートは必要ありません。
 - SQL を使用してカタログを作成するには: Databricks Runtime 13.3 LTS 以降。
 - カタログを操作するには、 Databricks Runtime 13.3 LTS、14.3 LTS、15.1 以降の標準アクセスモードを備えたコンピュート。
 
フォーリンカタログを作成する
フォーリンカタログを作成するには、カタログ エクスプローラー、または Databricks ノートブックまたは SQL クエリ エディターのCREATE FOREIGN CATALOG SQL コマンドを使用できます。
フォーリンカタログの管理と操作も参照してください。
Unity Catalog API を使用することもできます。 Databricks REST API リファレンスの カタログの作成 を参照してください。
- Catalog Explorer
 - SQL
 
- 
Databricks ワークスペースで、
[カタログ]をクリックして カタログエクスプローラー を開きます。
 - 
クイックアクセス ページで、 データを追加 ボタンをクリックし、 カタログを追加 を選択します。
 - 
カタログ名 を入力し、カタログの タイプ で 外部 を選択します。
 - 
ステップ 1 で作成した 接続 をドロップダウンから選択します。
 - 
認証済みパス フィールドに、ステップ 2 で外部ロケーションとして定義したクラウドストレージロケーションへのパスを入力します。たとえば、
s3://demo, s3://depts/finance。承認されたパスは、 Hive メタストア フェデレーションによってサポートされるフォーリンカタログのセキュリティの追加レイヤーです。 「許可されたパスとは」を参照してください。
 - 
作成 をクリックします。
 - 
(オプション) 構成 をクリックして、カタログに対するアクセス許可の付与とタグの追加を順を追って説明するウィザードを開きます。 これらの手順は、後で実行することもできます。
Unity Catalog での特権の管理とUnity Catalog のセキュリティ保護可能なオブジェクトへのタグの適用を参照してください。
 - 
(オプション)カタログを特定のワークスペースにバインドします。
デフォルトでは、カタログには、 Unity Catalog メタストアに接続されている任意のワークスペースからアクセスできます (ユーザー権限によって制限されます)。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動し、ワークスペースを割り当てます。 「 特定のワークスペースへのカタログ アクセスの制限」を参照してください。
 - 
フォーリンカタログに Hive メタストア メタデータを入力します。
ユーザーまたはワークフローがフォーリンカタログと対話するたびに、メタデータは Hive metastoreから同期されます。 最初のインタラクションでは、Unity Catalog にカタログが入力され、その内容が カタログエクスプローラ UI に表示されます。カタログにデータを取り込むには、カタログエクスプローラ で サポートされているコンピュート リソース を選択して開始します。 カタログの所有者 (カタログの作成により所有者になります) または
USE CATALOG権限を持つユーザーである必要があります。 
ノートブックまたはSQLクエリーエディタで次のSQLコマンドを実行します。括弧内の項目はオプションです。プレースホルダーの値を置き換えます。
<catalog-name>:Databricksのカタログの名前。<connection-name>: ステップ 1 で作成した接続オブジェクトの名前。<path1>,<path2>: ステップ 2 で外部ロケーションとして定義したクラウドストレージロケーションへのパス。たとえば、s3://demo, s3://depts/finance.承認されたパスは、 Hive メタストア フェデレーションによってサポートされるフォーリンカタログのセキュリティの追加レイヤーです。 「許可されたパスとは」を参照してください。「許可されたパスとは」を参照してください。カタログの作成時に認証パスを追加しない場合は、ALTER CATALOGを使用して後で追加できます。ALTER CATALOGを参照してください。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (authorized_paths '<path1>,<path2>');
ユーザーまたはワークフローがフェデレーションカタログと対話するたびに、メタデータは Hive メタストアから同期されます。