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

本文說明如何將中繼資料從 Dataproc Metastore 服務遷移至 Apache Iceberg REST 目錄端點或 Hive 目錄端點,這些端點皆建構於無邊界的 Lakehouse。

用途

  • 無伺服器現代化:從傳統的 Hive Metastore (HMS) 轉換為可自動調整資源配置的全代管目錄,免除管理 metastore 的營運負擔。
  • 多引擎協作:啟用引擎間的資料共用功能,包括 Apache Spark、Apache Flink、Apache Hive 和 BigQuery,讓資料科學家和分析師可以同時處理相同資料表,不必複製檔案。
  • 直接整合 BigQuery:直接從 BigQuery 查詢開放原始碼資料表,執行效能極高。
  • 統一管理:將中繼資料整合至單一資料來源,簡化資料探索作業,並確保政策執行一致。
  • 現代資料表格式:順暢採用 Apache Iceberg 等進階開放格式,同時維持與現有 Hive 工作負載的完整相容性。

事前準備

  1. 確認有作用中的 Dataproc Metastore 服務做為遷移來源。
  2. 確認目標 Hive 目錄或 Iceberg 目錄存在,且包含來源資料表資料和中繼資料所在的 Cloud Storage 值區或路徑 (例如 Dataproc Metastore 倉庫值區,如 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 for Apache Iceberg, Dataproc Metastore APIs.

    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 for Apache Iceberg, Dataproc Metastore APIs.

    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 beta metastore services migrations start 指令,或在 Dataproc Metastore 服務上呼叫 startMigration 方法,啟動遷移作業。
  3. 輪詢狀態:使用 gcloud beta metastore services migrations describe 指令或輪詢目標執行,監控遷移作業進度。
  4. 查看報表:查看寫入指定 Cloud Storage 路徑的詳細 JSON 報表,驗證結果。

執行遷移作業

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

開始遷移

如要在 Dataproc Metastore 服務上觸發中繼資料遷移作業,請使用 gcloud CLI 或 REST API。

gcloud

如要使用 gcloud 開始遷移,請執行 gcloud beta metastore services migrations start 指令:

gcloud beta 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_1HIVE_DB_2: 要遷移的 Hive 資料庫。
  • ICEBERG_CATALOG_ID:目的地 Iceberg 目錄 ID
  • ICEBERG_NAMESPACE_1, ICEBERG_NAMESPACE_2:要遷移的 Iceberg 命名空間。

REST

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

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/v1beta/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_1HIVE_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 beta metastore services migrations describe 指令:

gcloud beta 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/v1beta/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 的說明。

限制

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

後續步驟