メインコンテンツまでスキップ

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

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

Hive メタストアフェデレーションの概要については、Hiveメタストアフェデレーション:Hiveメタストアに登録されているテーブルをUnity Catalog で管理できるようにしますをご覧ください。

必要条件​

Hive metastore フェデレーションでサポートされているサービスと機能の一覧 (要件と機能のサポート) を確認します。

以下の各ステップの具体的な要件を示します。

ステップ 1: Unity Catalogを外部Hive metastoreに接続する​

この手順では、データベース システム (この場合は Hive metastore) にアクセスするためのパスと資格情報を指定する 接続、Unity Catalog セキュリティ保護可能なオブジェクトを作成します。

必要条件​

次のものが必要です。

  • 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. (オプション)コメントを追加します。

  6. 次へ をクリックします。

  7. [ 認証] ページで、ホスト データベースに次のように入力します。

    • ホスト : たとえば、 mysql-demo.lb123.us-west-2.rds.amazonaws.com
    • ポート : たとえば、 3306
    • ユーザー : たとえば、 mysql_user
    • パスワード : たとえば、 password123
  8. 次へ をクリックします。

  9. [ 接続の詳細] ページで、ホスト データベースに対して以下を選択または入力します。

    • データベース・タイプ : MySQL 、 SQLSERVER または POSTGRESQL を選択します。
    • バージョン : サポートされている Hive metastore バージョンには、0.13、2.3、3.1 があります。
    • データベース : 接続先のデータベースの名前。
    • (オプション) 接続の暗号化 :接続にSSL/TLS暗号化を有効にします。このオプションはデフォルトで有効になっています( true )。これをfalseに設定すると安全ではなく、データが暗号化されずにネットワーク経由で転送される可能性があります。信頼できるネットワーク内のサーバーに接続する場合を除き、暗号化を無効にしないでください。
    • (オプション) サーバー証明書を信頼する :このオプションは、 暗号化接続 が有効になっている場合( true )にのみ適用されます。データベースインスタンスがCA署名付きサーバー証明書を使用していない場合、 「サーバー証明書 の信頼」を有効にすると、サーバー証明書のルートCAのチェックがスキップされます。
  10. 接続の作成 をクリックします。

  11. カタログの基本 ページで、フォーリンカタログの名前を入力します。

  12. 承認パス で、カタログからアクセスできるクラウドストレージパスを選択します。これらのパスに該当するテーブルのみを、フェデレーテッドカタログを介してクエリできます。パスは外部ロケーションでカバーされている必要があります。 詳細については、承認されたパスとはを参照してください。

    カタログを作成した後、承認されたパスを編集できます。「承認済みパスとは何ですか?」を参照してください。

  13. アクセス ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。 すべてのワークスペースにアクセス権がある を選択するか、 ワークスペースに割り当て をクリックし、ワークスペースを選択して 割り当て をクリックします。

  14. カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を追加します。テキスト ボックスにユーザーまたはグループの入力を開始し、返された結果でユーザーまたはグループをクリックします。

  15. カタログに対する 権限 を付与します。

    1. 付与 をクリックします。

    2. カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。テキスト ボックスにユーザーまたはグループの入力を開始し、返された結果でユーザーまたはグループをクリックします。

    3. 各ユーザーまたはグループに付与する 権限プリセット を選択します。デフォルトでは、すべてのアカウントユーザーに BROWSE 権限が付与されます。

      • ドロップダウンメニューから「 データリーダー」 を選択して、カタログ内のオブジェクトに対する read 権限を付与します。
      • ドロップダウンメニューから「 データエディタ 」を選択して、カタログ内のオブジェクトに対する read 権限と modify 権限を付与します。
      • 付与する権限を手動で選択します。
    4. 付与 をクリックします。

  16. 次へ をクリックします。

  17. [ メタデータ ] ページで、必要に応じてタグをキーと値のペアとして指定します。詳細については、「セキュリティ 保護可能なオブジェクト Unity Catalog タグを適用する」を参照してください。

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

  19. 保存 をクリックします。

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

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

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

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

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

  • Unity Catalogで作成されたストレージ認証情報がない場合は、自動セットアップを使用して外部ロケーションを作成できます。これにより、IAMロールとストレージ認証情報が作成されます。自動セットアップを参照してください。
  • Unity Catalogで作成されたストレージ資格情報が既にある場合は、 Catalog Explorer または SQLを使用して外部ロケーションを手動で作成します。
  • DBFSマウントにデータを格納するHive metastoreをフェデレーションする場合は、該当するストレージ資格情報が存在するかどうかに関係なく、カタログエクスプローラを使用して外部ロケーションを手動で作成し、[ マウントからコピー] オプションを使用しますDBFS。

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

Unity Catalogで外部ロケーションを作成するとすぐに、その外部ロケーションによって表されるパスへのアクセスは、Unity Catalog対応コンピュートでクエリを実行するときにUnity Catalog権限によって強制されます。これにより、パスにアクセスするための適切な Unity Catalog アクセス許可を持たない既存のワークロードが中断される可能性があります。

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

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

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

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

  1. Databricks ワークスペースで、データアイコン。 カタログ をクリックします。
  2. クイック アクセス ページで、 外部データ > をクリックします。
  3. 更新する外部ロケーションを選択します。
  4. フォールバック モード トグルをオンにし、 有効にする をクリックして確定します。

ステップ 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 リファレンスの カタログの作成 を参照してください。

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

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

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

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

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

    承認されたパスは、 Hive メタストア フェデレーションによってサポートされるフォーリンカタログのセキュリティの追加レイヤーです。 「許可されたパスとは」を参照してください。

  6. [Storage location] (ストレージの場所) フィールドで、カタログのメタデータが保存されるクラウドストレージの場所を指定します。これは Iceberg テーブルを読み取るために必要です。たとえば、s3://my-catalog-metadata などです。

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

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

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

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

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

  10. フォーリンカタログに Hive メタストア メタデータを入力します。

    ユーザーまたはワークフローがフォーリンカタログと対話するたびに、メタデータは Hive metastoreから同期されます。 最初のインタラクションでは、Unity Catalog にカタログが入力され、その内容が カタログエクスプローラ UI に表示されます。カタログにデータを取り込むには、カタログエクスプローラ で サポートされているコンピュート リソース を選択して開始します。 カタログの所有者 (カタログの作成により所有者になります) または USE CATALOG 権限を持つユーザーである必要があります。

トラブルシューティング​

Iceberg テーブルの読み取りが失敗する​

同じフォーリンカタログ内の他のテーブルの読み取りが成功しているにもかかわらず、Iceberg テーブルの読み取りが失敗する場合は、そのフォーリンカタログに storage_root があることを確認してください。カタログ作成時に storage_root を設定することはオプションですが、Iceberg テーブルを読み取るためには必須です。メタストアからストレージルートを継承するだけでは不十分です。カタログ自体に場所を設定する必要があります。

エラーの例:

Failed to instantiate org.apache.hadoop.mapred.FileInputFormat

解決策: カタログに保存場所を設定してから、更新してください。カタログエクスプローラー ( Catalog > 対象のカタログ > Edit ) または SQL で設定できます。Iceberg のサポート要件については、要件と機能のサポートを参照してください。

SQL
ALTER CATALOG <catalog-name> SET MANAGED LOCATION '<storage-location>';

REFRESH FOREIGN CATALOG <catalog-name>;