將中繼資料從 Dataproc Metastore 遷移至 Lakehouse

您可以將中繼資料從 Dataproc Metastore 服務遷移至Apache Iceberg REST 目錄端點或 Hive 目錄端點,這些端點是以無邊界湖倉為基礎建構。這項遷移作業可協助您翻新系統,改用開放式資料表格式,並整合多個數據分析引擎的目錄存取權。

用途

  • 無伺服器現代化:從傳統 Hive Metastore (HMS) 轉換為自動調度資源的代管目錄,有助於消除 metastore 管理負擔。
  • 多引擎協作:在 Apache Spark、Apache Flink、Apache Hive 和 BigQuery 等引擎之間共用資料,讓資料科學家和分析師能同時處理相同的資料表,不必複製檔案。
  • 直接整合 BigQuery:直接從 BigQuery 查詢開放原始碼資料表。
  • 統一管理:將中繼資料整合至單一事實來源,以便探索資料及一致地執行政策。
  • 現代資料表格式:採用 Apache Iceberg 等開放格式,同時與現有 Hive 工作負載保持相容。

事前準備

  1. 確認有運作中的 Dataproc Metastore 服務做為遷移來源。
  2. 確認目標 Hive 目錄或 Iceberg 目錄存在,且包含來源資料表資料和中繼資料所在的 Cloud Storage bucket 或路徑 (例如 Dataproc Metastore 倉儲 bucket,例如 gs://gcs-your-project-name-0825d7b3-0627-4637-8fd0-cc6271d00eb4/hive-warehouse)。

    如果目的地目錄不含資料位置,資料表遷移作業會失敗,因為目標目錄無法註冊資料表。如要瞭解如何建立 Iceberg 目錄,請參閱「設定 Iceberg REST 目錄端點」。

    如要建立 Hive 目錄,請參閱「建立 Lakehouse Hive 目錄」。
  3. 登入 Google Cloud 帳戶。如果您未曾使用過 Google Cloud,歡迎 建立帳戶,親自體驗實際使用我們產品的成效。新客戶還能獲得價值 $300 美元的免費抵免額,用於執行、測試及部署工作負載。
  4. Verify that billing is enabled for your Google Cloud project.

  5. Enable the Lakehouse, Dataproc Metastore APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Lakehouse, Dataproc Metastore APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

必要的角色

如要取得觸發遷移作業所需的權限,請要求管理員授予您 Dataproc Metastore 服務的下列 IAM 角色:

  • 啟動遷移作業:Dataproc Metastore 編輯者 (roles/metastore.editor)
  • 建立 Hive 或 Iceberg 目錄:BigLake 管理員 (roles/biglake.admin)
  • 使用目標專案將中繼資料遷移至目的地目錄:Dataproc Metastore 服務代理 (service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com) 的 BigLake 管理員 (roles/biglake.admin)。
  • 為報表 bucket 寫入遷移報表 (如未使用服務構件 bucket):Dataproc Metastore 服務代理 (service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com) 的 Storage 物件管理員 (roles/storage.objectAdmin)

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

遷移作業的運作方式

遷移程序如下:

  1. 選擇目標目錄:選取遷移作業的目的地 Hive 目錄端點或 Apache Iceberg REST 目錄端點。
  2. 觸發遷移:執行 gcloud metastore services migrations start 指令,或在 Dataproc Metastore 服務上呼叫 startMigration 方法,啟動遷移作業。
  3. 輪詢狀態:使用 gcloud metastore services migrations describe 指令或輪詢目標執行作業,監控遷移進度。
  4. 評論報告:查看寫入指定 Cloud Storage 路徑的詳細 JSON 報告,驗證結果。

執行遷移作業

如要執行遷移作業,請觸發遷移程序,然後監控進度。

開始遷移

如要觸發 Dataproc Metastore 服務的中繼資料遷移作業,請使用 Google Cloud 控制台、gcloud CLI 或 REST API。

控制台

  1. 在 Google Cloud 控制台中,前往「Dataproc Metastore」頁面。

    前往 Dataproc Metastore

  2. 在 metastore 服務清單中,按一下要遷移的服務名稱。

  3. 在服務詳細資料頁面,按一下頂端導覽列中的「Migrate to Lakehouse」(遷移至 Lakehouse)。

  4. 在「遷移作業名稱」部分,輸入遷移作業的顯示名稱。

  5. 在「Migration type」(遷移類型) 部分,選取「Backfill migration」(補充遷移) 即可執行遷移作業,或選取「Dry run」(模擬測試) 即可驗證遷移作業,而不將中繼資料寫入目的地目錄。

  6. 設定目標:

    • 報表:(選用) 選取要將遷移狀態報表儲存於哪個 Cloud Storage 路徑。如未指定,系統會在 Dataproc Metastore 服務的構件 bucket 中產生報告。
    • 衝突處理:選取要略過或覆寫重複的資料庫項目。
  7. 在「目的地」部分,選取要遷移至哪種目錄:Iceberg REST 目錄端點或 Hive metastore。您可以根據要從來源資料庫遷移的資料表類型,遷移至一個目錄或同時遷移至兩個目錄。

    如要遷移至 Iceberg REST 目錄:

    1. 在「Project」(專案),選取要遷移至的目錄所在專案。
    2. 在「Iceberg REST catalog」(Iceberg REST 目錄),選取要遷移至的目錄,或按一下「Create catalog」(建立目錄) 建立新目錄。

    如要遷移至 Hive 目錄:

    1. 在「Project」(專案),選取要遷移至的目錄所在的專案。
    2. 在「Hive catalog」(Hive 目錄) 部分,選取要遷移至的目錄,或按一下「Create catalog」(建立目錄) 建立新目錄。
  8. 按一下「Start Migration」。

系統會自動將您重新導向至「遷移」分頁。在「Managed Migrations」(代管遷移) 下方,系統會列出遷移作業,並持續更新狀態,直到遷移完成。

gcloud

如要使用 gcloud 啟動遷移作業,請執行 gcloud metastore services migrations start 指令:

gcloud metastore services migrations start SERVICE_ID \
    --location=REGION \
    --hive-catalog="projects/PROJECT_ID/catalogs/HIVE_CATALOG_ID" \
    --hive-databases="HIVE_DB_1,HIVE_DB_2" \
    --iceberg-catalog="projects/PROJECT_ID/catalogs/ICEBERG_CATALOG_ID" \
    --iceberg-namespaces="ICEBERG_NAMESPACE_1,ICEBERG_NAMESPACE_2" \
    --async

更改下列內容:

  • SERVICE_ID:Dataproc Metastore 服務的 ID
  • REGION:Dataproc Metastore 服務的區域
  • PROJECT_ID:您的 Google Cloud 專案 ID
  • HIVE_CATALOG_ID:目的地 Hive 目錄 ID
  • HIVE_DB_1、HIVE_DB_2:要遷移的 Hive 資料庫。
  • ICEBERG_CATALOG_ID:目的地 Iceberg 目錄 ID
  • ICEBERG_NAMESPACE_1、ICEBERG_NAMESPACE_2:要遷移的 Iceberg 命名空間。

REST

如要使用 REST API 觸發中繼資料遷移作業,請使用 BigLakeMetastoreMigrationConfig 設定呼叫 startMigration 方法:

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d '{
      "migrationExecution": {
        "biglakeMetastoreMigrationConfig": {
          "mode": "BACKFILL",
          "dryRun": false,
          "reportPath": "gs://BUCKET_NAME/PATH/",
          "conflictPolicy": "SKIP",
          "hiveConfig": {
            "catalog": "projects/PROJECT_ID/catalogs/HIVE_CATALOG_ID",
            "databases": ["HIVE_DB_1", "HIVE_DB_2"]
          },
          "icebergConfig": {
            "catalog": "projects/PROJECT_ID/catalogs/ICEBERG_CATALOG_ID",
            "namespaces": ["ICEBERG_NAMESPACE_1", "ICEBERG_NAMESPACE_2"]
          }
        }
      }
    }' \
    "https://metastore.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/services/SERVICE_ID:startMigration"

更改下列內容:

  • BUCKET_NAME:報表的 Cloud Storage bucket 名稱
  • PATH:bucket 中報表的路徑
  • PROJECT_ID:您的 Google Cloud 專案 ID
  • HIVE_CATALOG_ID:目的地 Hive 目錄 ID
  • HIVE_DB_1、HIVE_DB_2:要遷移的 Hive 資料庫。
  • ICEBERG_CATALOG_ID:目的地 Iceberg 目錄 ID
  • ICEBERG_NAMESPACE_1、ICEBERG_NAMESPACE_2:要遷移的 Iceberg 命名空間。
  • REGION:Dataproc Metastore 服務的區域
  • SERVICE_ID:Dataproc Metastore 服務的 ID

輪詢遷移執行作業

這項要求會啟動長時間執行的作業 (LRO),並傳回專屬的遷移作業執行 ID。您可以使用 gcloud CLI 或 REST API 監控執行進度:

gcloud

如要使用 gcloud 描述遷移作業執行作業,請執行 gcloud metastore services migrations describe 指令:

gcloud metastore services migrations describe MIGRATION_EXECUTION_ID \
    --service=SERVICE_ID \
    --location=REGION

更改下列內容:

  • MIGRATION_EXECUTION_ID:上一個步驟傳回的遷移執行作業 ID
  • SERVICE_ID:Dataproc Metastore 服務的 ID
  • REGION:Dataproc Metastore 服務的區域

REST

如要使用 REST API 監控執行進度,請在該執行路徑上呼叫 get 方法:

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://metastore.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/services/SERVICE_ID/migrationExecutions/MIGRATION_EXECUTION_ID"

更改下列內容:

  • PROJECT_ID:您的 Google Cloud 專案 ID
  • REGION:Dataproc Metastore 服務的區域
  • SERVICE_ID:Dataproc Metastore 服務的 ID
  • MIGRATION_EXECUTION_ID:上一個步驟傳回的遷移執行作業 ID

詳細遷移報表

遷移作業 (補充或模擬測試) 完成後,遷移工具會根據 MigrationReport 結構定義,將兩份詳細的 JSON 報表檔案寫入 reportPath 中指定的目標 Cloud Storage 路徑:

  • summary.json:包含高階匯總 MigrationSummary 結構。
  • full_report.json:包含更詳細、更精細的遷移報告。詳情請參閱 CatalogReport。

如要在 Google Cloud 控制台查看報表,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「Dataproc Metastore」頁面。

    前往 Dataproc Metastore

  2. 在 metastore 服務清單中,按一下包含報表的服務顯示名稱。

    「Migrations」(遷移) 頁面隨即開啟。

  3. 在「Managed Migrations」(代管遷移作業) 下方,選取包含報表的遷移作業名稱。

    「Migration details」(遷移詳細資料) 頁面隨即開啟,顯示已遷移資料庫和資料表的詳細資料,以及遷移狀態。

限制

  • 目的地目錄必須包含來源資料表資料和中繼資料所在的 Cloud Storage bucket 或路徑 (例如 Dataproc Metastore 倉儲 bucket)。如果目標目錄未設定資料 bucket 位置,目的地目錄就無法註冊資料表,資料表遷移作業也會失敗。
  • 這項工具僅支援一次性回填。遷移後,來源 Dataproc Metastore 的任何中繼資料變更都不會自動套用。您必須重新執行遷移作業,才能將目標目錄與來源同步。
  • 遷移作業受限於目的地目錄。如果 Dataproc Metastore 資料表包含目標目錄不支援的結構定義結構或屬性 (例如複雜類型),該資料表的遷移作業就會失敗。
  • 資料表或資料庫的 Dataproc Metastore 權限不會遷移至 Lakehouse。

後續步驟