外部Hive metastore の フェデレーションを有効にするHive metastore

プレビュー

この機能はパブリックプレビュー段階です。

この記事では、外部Hive metastore をフェデレーションして、組織がHive metastore を使用してUnity Catalog テーブルを操作できるようにする方法について説明します。

Hive metastoreHive metastoreフェデレーションの概要については、「 フェデレーション:Unity Catalog に登録されたテーブルを管理するための の有効化 」を参照してください。Hive metastore

始める前に

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 コマンド

  1. Databricks ワークスペースで、[カタログアイコン カタログ] をクリックします。

  2. [クイック アクセス] ページで、[データの追加] > [接続の追加] をクリックします。

  3. ユーザーフレンドリーな接続名を入力します。

  4. 接続タイプ」に「Hive metastore」を選択し、「メタストア・タイプ」に「外部」を選択します。

  5. ホスト・データベースの次の 認証 プロパティを入力します。

    • ホスト: たとえば、 mysql-demo.lb123.us-west-2.rds.amazonaws.com

    • ポート: たとえば、 3306

    • ユーザー: たとえば、 mysql_user

    • パスワード: たとえば、 password123

  6. ホスト・データベースの次の 接続詳細 を入力します。

    • バージョン: サポートされている Hive metastore バージョンには 0.13 と 2.3 が含まれます。

    • データベース: 接続しているデータベースの名前。

    • データベース・タイプ: たとえば、 MySQLです。

  7. (オプション)コメントを追加します。

    これは、デフォルトの場所を使用しない場合にのみ必要です。

  8. 作成をクリックします。

ノートブックまたはDatabricks 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',
);

warehouse_directoryにデフォルトHive ウェアハウス ディレクトリの場所を使用しない場合にのみ、Hive metastore を含めます。

認証情報などの機密性の高い値には、プレーンテキストの文字列の代わりに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 コマンドでプレーンテキスト文字列を使用する必要がある場合は、$ などの特殊文字を with \ でエスケープして文字列を切り捨てないようにしてください。 たとえば、 \$のようになります。

シークレットの設定については、「シークレット管理」を参照してください。

ステップ2:Hive metastore 内のデータ用の外部ロケーションを作成する

この手順では、外部Unity Catalog に登録されているデータを保持するクラウド ストレージ ロケーションへのアクセスを制御するために、 で外部ロケーションを設定します。Hive metastore

外部ロケーション は、Unity Catalog ストレージ資格情報 をクラウド ストレージ コンテナー パスに関連付ける セキュリティ保護可能なオブジェクトです。外部ロケーションとストレージの認証情報を参照してください。

要件

クラウド ストレージとDatabricksのアクセス許可の要件については、「クラウド ストレージを Databricksに接続するための外部ロケーションを作成する」の「始める前に」を参照してください。

外部ロケーションを作成するためのオプション

Databricks Unity Catalogで外部ロケーションを作成するために推奨されるプロセスは、状況によって異なります。

外部ロケーションでフォールバックモードを有効にする

で外部ロケーションを作成するとすぐに、その外部ロケーションで表されるパスへのアクセスは、Unity Catalog Unity CatalogUnity Catalog対応コンピュート ( シングル ユーザー、共有、またはSQL ウェアハウス) でクエリを実行するときに、 アクセス許可によって適用されます。これにより、パスにアクセスするための適切な Unity Catalog アクセス許可を持たない既存のワークロードが中断される可能性があります。

外部ロケーションがフォールバックモードの場合、システムはまず、そのロケーションに対するクエリプリンシパルの Unity Catalog アクセス許可を確認し、それが成功しない場合は、インスタンスプロファイルや Apache Spark 設定プロパティなど、既存のクラスタリングまたはノートブックスコープの認証情報を使用してフォールバックし、既存のワークロードが中断なく実行し続けるようにします。

フォールバックモードは、レガシーワークロードの移行中に便利です。 Unity Catalogアクセス許可を使用して正常に実行するようにワークロードを更新したら、フォールバック モードを無効にして、従来のクラスタリング スコープの資格情報がUnity Catalog データ ガバナンスのバイパスに使用されないようにする必要があります。

フォールバック モードは、Catalog Explorer または Unity Catalog 外部ロケーション REST APIを使用して有効にできます。

必要な権限: 外部ロケーションの所有者。

  1. Databricks ワークスペースで、[カタログアイコン カタログ] をクリックします。

  2. クイック アクセス ページで、外部データ データ (>) をクリックします。

  3. 更新する外部ロケーションを選択します。

  4. [フォールバック モード] トグルをオンにし、[有効にする] をクリックして確定します。

次の 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 で作成した接続を使用して、ステップ 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 リファレンスの 「カタログの作成 」を参照してください。

  1. Databricks ワークスペースで、カタログアイコン[カタログ]をクリックしてカタログエクスプローラーを開きます。

  2. クイックアクセスページで、「データボタンを追加」をクリックし、「カタログを追加」を選択します。

  3. カタログ名を入力し、カタログの [タイプ] で [外部] を選択します。

  4. ステップ 1 で作成した 接続 をドロップダウンから選択します。

  5. [認証済みパス] フィールドに、ステップ 2 で外部ロケーションとして定義したクラウドストレージロケーションへのパスを入力します。たとえば、s3://demo,s3://depts/finance.

    許可されたパスは、フェデレーテッド・カタログ専用のセキュリティ・レイヤーです。 「許可されたパスとは」を参照してください。

  6. 作成をクリックします。

  7. (オプション) [構成 ] をクリックして、カタログに対するアクセス許可の付与とタグの追加を順を追って説明するウィザードを開きます。 これらの手順は、後で実行することもできます。

    「Unity Catalog での特権の管理」と「Unity Catalog のセキュリティ保護可能なオブジェクトへのタグの適用」を参照してください。

  8. (オプション)カタログを特定のワークスペースにバインドします。

    デフォルトにより、カタログは、 Unity Catalog メタストアにアタッチされた任意のワークスペースからアクセスできます(ユーザー権限によって制限されます)。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動してワークスペースを割り当てます。 「 カタログへのアクセスを特定のワークスペースに制限する」を参照してください。

  9. フェデレーテッド・カタログに 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. 許可されたパスは、フェデレーテッド・カタログ専用のセキュリティ・レイヤーです。 「許可されたパスとは」を参照してください。

    CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
    OPTIONS (authorized_paths '<path1>,<path2>');
    

    ユーザーまたはワークフローがフェデレーションカタログと対話するたびに、メタデータは Hive metastoreから同期されます。

フォーリンカタログの管理と操作も参照してください。