外部Hive metastoreのHive metastoreフェデレーションを有効にする
この記事では、外部Hive metastore をフェデレーションして、組織がHive metastore を使用してUnity Catalog テーブルを操作できるようにする方法について説明します。
Hive metastoreフェデレーションの概要については、Hiveメタストアフェデレーション:Hiveメタストアに登録されているテーブルをUnity Catalog で管理できるようにしますを参照してください
始める前に
Hive metastore フェデレーションでサポートされているサービスと機能の一覧 (要件、サポートされている機能、制限事項) を確認します。
各ステップの具体的な要件は、以下のとおりです。
ステップ 1: Unity Catalog を外部Hive metastoreに接続する
この手順では、 接続 Unity Catalog(データベース システムにアクセスするためのパスと資格情報 (この場合は) を指定する セキュリティ保護可能なオブジェクト)Hive metastore を作成します。
必要条件
次のものが必要です。
- Hive metastoreをホストするデータベース・システムへのアクセスを許可するユーザ名とパスワード。
- データベースのURL(ホストとポート)。
- データベース名。
- Unity Catalog メタストアに対する
CREATE CONNECTION
特権。メタストアの管理者は、デフォルトによってこの特権を持っています。
接続を作成する
接続を作成するには、カタログエクスプローラーを使用するか、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 」を選択し、「 メタストア・タイプ 」に「 外部 」を選択します。
-
(オプション)コメントを追加します。
-
次へ をクリックします。
-
「 認証 」ページで、ホスト・データベースについて次のように入力します。
- ホスト : たとえば、
mysql-demo.lb123.us-west-2.rds.amazonaws.com
- ポート : たとえば、
3306
- ユーザー : たとえば、
mysql_user
- パスワード : たとえば、
password123
- ホスト : たとえば、
-
次へ をクリックします。
-
「 接続の詳細 」ページで、ホスト・データベースに対して次を選択または入力します:
- データベース・タイプ : 「MySQL」、「 SQLSERVER」 または 「POSTGRESQL」 を選択します。
- バージョン : サポートされている Hive metastore バージョンには、0.13、2.3、3.1 が含まれます。
- データベース : 接続しているデータベースの名前。
(オプション)データベース・インスタンスが CA 署名付きサーバ証明書を使用しない場合は、[ サーバ証明書を信頼する ] を選択します。
-
接続の作成 をクリックします。
-
[カタログの基本 ] ページで、フォーリンカタログの名前を入力します。
-
[Authorized paths ] で、カタログからアクセスできるクラウドストレージパスを選択します。これらのパスに該当するテーブルのみを、フェデレーテッドカタログを介してクエリできます。パスは外部ロケーションでカバーされている必要があります。 詳細については、「 承認されたパスとは」を参照してください。
-
[ アクセス ] ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。[ すべてのワークスペースにアクセス権がある ] を選択するか、[ ワークスペースに割り当て ] をクリックし、ワークスペースを選択して [ 割り当て] をクリックします。
-
カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を追加します。テキスト ボックスにユーザーまたはグループを入力し始め、返された結果でユーザーまたはグループをクリックします。
-
カタログに対する 権限を付与 します。
-
付与 をクリックします。
-
カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。テキスト ボックスにユーザーまたはグループを入力し始め、返された結果でユーザーまたはグループをクリックします。
-
各ユーザーまたはグループに付与する 権限プリセット を選択します。デフォルトでは、すべてのアカウントユーザーに
BROWSE
が付与されます。- ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する
read
権限を付与します。 - ドロップダウンメニューから「 データエディタ 」を選択して、カタログ内のオブジェクトに対する
read
権限とmodify
権限を付与します。 - 付与する権限を手動で選択します。
- ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する
-
付与 をクリックします。
-
-
次へ をクリックします。
-
[メタデータ] ページで、必要に応じてタグをキーと値のペアとして指定します。詳細については、「Unity Catalog セキュリティ保護可能なオブジェクトにタグを適用する」を参照してください。
-
(オプション)コメントを追加します。
-
保存 をクリックします。
ノートブックまたはSQLクエリーエディターで次のコマンドを実行します。
CREATE CONNECTION <connection-name> TYPE hive_metastore
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>',
database '<database-name>',
db_type 'MYSQL',
version '2.3'
);
資格情報などの機密性の高い値には、プレーンテキスト文字列の代わりに Databricks シークレット を使用することをお勧めします。例えば:
CREATE CONNECTION <connection-name> TYPE hive_metastore
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>'),
database '<database-name>',
db_type 'MYSQL',
version '2.3'
);
ノートブック SQL コマンドでプレーンテキスト文字列を使用する必要がある場合は、 $
を \
でエスケープして文字列を切り捨てないようにしてください。 たとえば、 \$
のようになります。
シークレットの設定に関する情報については、「 シークレット管理」を参照してください。
ステップ 2: Hive metastore内のデータ用の外部ロケーションを作成する
この手順では、外部Unity Catalog に登録されているデータを保持するクラウド ストレージ ロケーションへのアクセスを制御するために、 で外部ロケーションを設定します。Hive metastore
外部ロケーション は、Unity Catalog ストレージ資格情報 をクラウド ストレージ コンテナー パスに関連付ける セキュリティ保護可能なオブジェクトです。外部ロケーションとストレージの認証情報を参照してください。
必要条件
クラウド ストレージとDatabricksのアクセス許可の要件については、「クラウド ストレージを Databricksに接続するための外部ロケーションを作成する」の「始める前に」を参照してください。
外部ロケーションを作成するためのオプション
Databricks Unity Catalogで外部ロケーションを作成するために推奨されるプロセスは、状況によって異なります。
- Unity CatalogAWSでストレージ認証情報を作成していない場合は、IAM ロールとストレージ認証情報を作成する CloudFormation テンプレートを使用して外部ロケーションを作成できます。「AWS CloudFormation テンプレートを使用して S3 バケットの外部ロケーションを作成する」の手順に従います。
- Unity Catalogで作成したストレージ認証情報がすでにある場合は、外部ロケーションを手動で作成します。「カタログ エクスプローラーを使用して外部ロケーションを手動で作成する」または「SQL を使用して外部ロケーションを作成する」の手順に従います。
- Hive metastoreDBFSマウント にデータを保存している をフェデレーションする場合は、該当するストレージ認証情報が存在するかどうかに関係なく、外部ロケーションを手動で作成し 、 マウントからコピー 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から同期されます。