従来のワークスペースHive metastoreのHive metastoreフェデレーションを有効にする
この記事では、レガシDatabricksHive metastore をフェデレーションして、組織がHive metastore を使用してUnity Catalog テーブルを操作できるようにする方法について説明します。
Hive metastoreフェデレーションの概要については、Hiveメタストアフェデレーション:Hiveメタストアに登録されているテーブルをUnity Catalog で管理できるようにします
始める前に
Hive metastore フェデレーションでサポートされているサービスと機能の一覧 (要件、サポートされている機能、制限事項) を確認します。
各ステップの具体的な要件は、以下のとおりです。
ステップ 1: Unity Catalog をHive metastoreに接続する
この手順では、Unity Catalog接続Databricks (データベース システムにアクセスするためのパスと資格情報 (この場合は ワークスペースのレガシ) を指定する セキュリティ保護可能なオブジェクト)Hive metastore を作成します。
必要条件
- Unity Catalog メタストアに対する
CREATE CONNECTION
特権。
接続を作成する
接続では、外部データベースシステムにアクセスするためのパスと認証情報を指定します。接続を作成するには、カタログエクスプローラーを使用するか、Databricksノートブックまたは Databricks SQLクエリーエディタで CREATE CONNECTION
SQLコマンドを使用できます。
Databricks REST API または Databricks CLI を使用して接続を作成することもできます。 POST /api/2.1/unity-catalog/connections を参照してください。 および Unity Catalog コマンド。
必要な権限: メタストア管理者またはCREATE CONNECTION
権限を持つユーザー。
- Catalog Explorer
- SQL
-
Databricks ワークスペースで、
カタログ をクリックします。
-
クイック アクセス ページで、 データの追加] > [接続の追加 をクリックします。
-
接続のセットアップ ウィザードの 接続の基本 ページで、わかりやすい 接続名 を入力します。
-
「 接続タイプ 」に 「Hive metastore 」を、「 メタストア・タイプ 」に「 内部 」を選択します。
-
(オプション)コメントを追加します。
-
次へ をクリックします。
-
(オプション) [接続の詳細 ] ページで、 Hive ウェアハウス ディレクトリ への完全修飾パスを入力します。
これは、デフォルトの場所を使用しない場合にのみ必要です。
-
接続の作成 をクリックします。
-
[カタログの基本 ] ページで、フォーリンカタログの名前を入力します。
-
[Authorized paths ] で、カタログからアクセスできるクラウドストレージパスを選択します。これらのパスに該当するテーブルのみを、フェデレーテッドカタログを介してクエリできます。パスは外部ロケーションでカバーされている必要があります。 詳細については、「 承認されたパスとは」を参照してください。
-
[ カタログを作成 ] をクリックします。
-
[ アクセス ] ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。[ すべてのワークスペースにアクセス権がある ] を選択するか、[ ワークスペースに割り当て ] をクリックし、ワークスペースを選択して [ 割り当て] をクリックします。
-
カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を追加します。テキスト ボックスにユーザーまたはグループを入力し始め、返された結果でユーザーまたはグループをクリックします。
-
カタログに対する 権限を付与 します。
-
付与 をクリックします。
-
カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。テキスト ボックスにユーザーまたはグループを入力し始め、返された結果でユーザーまたはグループをクリックします。
-
各ユーザーまたはグループに付与する 権限プリセット を選択します。デフォルトでは、すべてのアカウントユーザーに
BROWSE
が付与されます。- ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する
read
権限を付与します。 - ドロップダウンメニューから「 データエディタ 」を選択して、カタログ内のオブジェクトに対する
read
権限とmodify
権限を付与します。 - 付与する権限を手動で選択します。
- ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する
-
付与 をクリックします。
-
-
次へ をクリックします。
-
[メタデータ] ページで、必要に応じてタグをキーと値のペアとして指定します。詳細については、「Unity Catalog セキュリティ保護可能なオブジェクトにタグを適用する」を参照してください。
-
(オプション)コメントを追加します。
-
保存 をクリックします。
ノートブックまたはSQLクエリーエディターで次のコマンドを実行します。
CREATE CONNECTION IF NOT EXISTS <connection-name> TYPE hive_metastore
OPTIONS (
builtin true,
warehouse_directory '/path/to/warehouse-directory' );
クラスタリング構成の warehouse_directory
にデフォルトHive ウェアハウス ディレクトリの場所を使用しない場合にのみ、 を含めます。Hive metastoreこのパスは、マネージドテーブルまたはスキーマがフェデレーションカタログから作成されるときに、その場所を導出するために使用されます。
ステップ 2: 内部レガシ システムのデータ用の外部ロケーションを作成する Hive metastore
この手順では、 Unity Catalog で外部ロケーションを設定して、従来の内部 Hive metastoreに登録されたデータを保持するクラウド ストレージ ロケーションへのアクセスを制御します。
外部ロケーション は、Unity Catalog ストレージ資格情報 をクラウド ストレージ コンテナー パスに関連付ける セキュリティ保護可能なオブジェクトです。外部ロケーションとストレージの認証情報を参照してください。
必要条件
クラウド ストレージとDatabricksのアクセス許可の要件については、「クラウド ストレージを Databricksに接続するための外部ロケーションを作成する」の「始める前に」を参照してください。
ワークスペースのレガシー DBFSルートの外部ロケーションを作成する場合は、「DBFSルート内のデータの外部ロケーションを作成する」の「始める前に」を参照してください。
外部ロケーションを作成するためのオプション
Databricks Unity Catalogで外部ロケーションを作成するために推奨されるプロセスは、状況によって異なります。
- Unity CatalogAWSでストレージ認証情報を作成していない場合は、IAM ロールとストレージ認証情報を作成する CloudFormation テンプレートを使用して外部ロケーションを作成できます。「AWS CloudFormation テンプレートを使用して S3 バケットの外部ロケーションを作成する」の手順に従います。
- Unity Catalogで作成したストレージ認証情報がすでにある場合は、外部ロケーションを手動で作成します。「カタログ エクスプローラーを使用して外部ロケーションを手動で作成する」または「SQL を使用して外部ロケーションを作成する」の手順に従います。
- DBFSマウント DatabricksHive metastoreまたはDBFSルート にデータを格納する内部 をフェデレーションする場合は、外部ロケーションを手動で作成し 、[Copy fromDBFS mount] オプションを使用します。これは、適用可能なストレージ資格情報が存在するかどうかには関係ありません。 「カタログ エクスプローラーを使用して外部ロケーションを手動で作成する」または「DBFSルート内のデータ用の外部ロケーションを作成する」の手順に従います。
外部ロケーションでフォールバックモードを有効にする
Unity Catalogで外部ロケーションを作成するとすぐに、その外部ロケーションで表されるパスへのアクセスは、Unity Catalog対応コンピュートでクエリを実行するときにUnity Catalog権限によって強制されます。これにより、パスにアクセスするための適切な Unity Catalog アクセス許可を持たない既存のワークロードが中断される可能性があります。
外部ロケーションがフォールバックモードの場合、システムはまず、そのロケーションに対するクエリプリンシパルの Unity Catalog アクセス許可を確認し、それが成功しない場合は、インスタンスプロファイルや Apache Spark 設定プロパティなど、既存のクラスターまたはノートブックスコープの認証情報を使用してフォールバックし、既存のワークロードが中断なく実行し続けるようにします。
フォールバックモードは、レガシーワークロードの移行中に便利です。 Unity Catalogアクセス許可を使用して正常に実行するようにワークロードを更新したら、フォールバック モードを無効にして、従来のクラスター スコープの資格情報がUnity Catalog データ ガバナンスのバイパスに使用されないようにする必要があります。
フォールバック モードは、Catalog Explorer または 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:フォーリンカタログを作成する
Catalog Explorer の接続作成ウィザードを使用してステップ 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
コンピュートの要件 :
- Catalog Explorerを使用してカタログを作成するには、コンピュートは必要ありません。
- 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 にカタログが入力され、その内容が Catalog Explorer UI に表示されます。カタログにデータを取り込むには、Catalog Explorer で サポートされているコンピュート リソース を選択して開始します。 カタログの所有者 (カタログの作成により所有者になります) または
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から同期されます。
フォーリンテーブルのストレージロケーションが DBFSにあり、テーブルをバックアップする DBFS マウントポイントが最後にアクセスされてから別のパスに再マッピングされている場合、テーブルへのアクセスは失敗し、UC_RESOLVED_DBFS_PATH_MISMATCH
エラーコードが表示されます。 次のコマンドを使用して、解決された DBFS の場所を更新し、エラーを修正します。
REFRESH FOREIGN TABLE my_federated_catalog.schema.table RESOLVE DBFS LOCATION;
OWNER であるか、テーブルに対する MANAGE 権限を持っている必要があります。フォーリンカタログ、SCHEMA、TABLEREFRESHを参照してください。