AWS GlueメタストアのHive metastoreフェデレーションを有効にする
この記事では、組織がUnity Catalogを使用してHiveメタストアテーブルを操作できるように、AWS Glueメタストアをフェデレーションする方法について説明します。
Hive metastoreフェデレーションの概要については、Hiveメタストアフェデレーション:Hiveメタストアに登録されているテーブルをUnity Catalog で管理できるように有効化をご覧ください。
始める前に
Hive metastore フェデレーションでサポートされているサービスと機能の一覧 (要件、サポートされている機能、制限事項) を確認します。
各ステップの具体的な要件は、以下のとおりです。
ステップ 1: Unity Catalog をAWS Glue Hive metastoreに接続する
AWS GlueのHiveメタストアを Databricksに接続するには、次のことを行う必要があります。
- AWS Glue リソースへの一時的なアクセスをDatabricksに付与する信頼ポリシーを用いて IAMロールを作成します。
- で ロールを登録するサービス資格情報 を作成します。IAMUnity 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のアクセス許可の要件については、「クラウド ストレージを Databricksに接続するための外部ロケーションを作成する」の「始める前に」を参照してください。
外部ロケーションを作成するためのオプション
Databricks Unity Catalogで外部ロケーションを作成するために推奨されるプロセスは、状況によって異なります。
- Unity Catalogでストレージ認証情報を作成していない場合は、IAM ロールとストレージ認証情報を作成するAWS CloudFormation テンプレートを使用して外部ロケーションを作成できます。AWS CloudFormation テンプレートを使用して S3 バケットの外部ロケーションを作成するの手順に従います。
- Unity Catalogで作成したストレージ認証情報がすでにある場合は、外部ロケーションを手動で作成します。カタログ エクスプローラーを使用して外部ロケーションを手動で作成するまたは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 metastoreに登録されているデータです。
ユーザーまたはワークフローがフォーリンカタログと対話するたびに、メタデータは Hive metastoreから同期されます。
必要条件
権限要件 :
フォーリンカタログを作成するには:
- 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 metastore フェデレーションによってサポートされるフォーリンカタログのセキュリティの追加レイヤーです。 「許可されたパスとは」を参照してください。
-
作成 をクリックします。
-
(オプション) 構成 をクリックして、カタログに対するアクセス許可の付与とタグの追加を順を追って説明するウィザードを開きます。 これらの手順は、後で実行することもできます。
Unity Catalog での特権の管理とUnity Catalog のセキュリティ保護可能なオブジェクトへのタグの適用を参照してください。
-
(オプション)カタログを特定のワークスペースにバインドします。
デフォルトにより、カタログは、 Unity Catalog メタストアにアタッチされた任意のワークスペースからアクセスできます(ユーザー権限によって制限されます)。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動してワークスペースを割り当てます。 「 カタログへのアクセスを特定のワークスペースに制限する」を参照してください。
-
フォーリンカタログに Hive metastore メタデータを入力します。
ユーザーまたはワークフローがフォーリンカタログと対話するたびに、メタデータは Hive metastoreから同期されます。 最初のインタラクションでは、Unity Catalog にカタログが入力され、その内容が カタログエクスプローラ UI に表示されます。カタログにデータを取り込むには、カタログエクスプローラ で サポートされているコンピュート リソース を選択して開始します。 カタログの所有者 (カタログの作成により所有者になります) または
USE CATALOG
権限を持つユーザーである必要があります。
ノートブックまたはSQLクエリーエディタで次のSQLコマンドを実行します。括弧内の項目はオプションです。プレースホルダーの値を置き換えます。
<catalog-name>
:Databricksのカタログの名前。<connection-name>
: ステップ 1 で作成した接続オブジェクトの名前。<path1>,<path2>
: ステップ 2 で外部ロケーションとして定義したクラウドストレージロケーションへのパス。たとえば、s3://demo, s3://depts/finance
.承認されたパスは、 Hive metastore フェデレーションによってサポートされるフォーリンカタログのセキュリティの追加レイヤーです。 「許可されたパスとは」を参照してください。「許可されたパスとは」を参照してください。カタログの作成時に認証パスを追加しない場合は、ALTER CATALOG
を使用して後で追加できます。ALTER CATALOGを参照してください。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (authorized_paths '<path1>,<path2>');
ユーザーまたはワークフローがフェデレーションカタログと対話するたびに、メタデータは Hive metastoreから同期されます。