遷移AWS Glue Data Catalog中繼資料至阿里雲DLF

更新時間:
Copy as MD

本文介紹了如何將AWS Glue Data Catalog中的中繼資料,包括但不限於庫、表和分區等資訊,無縫遷移到阿里雲Data Lake Formation(DLF)。通過實施本次遷移,您能夠充分利用DLF統一的中繼資料管理、許可權與安全管理以及湖管理能力,快速在阿里雲上構建並營運安全、統一的雲原生資料湖環境。

背景資訊

該遷移支援增量式的更新,確保可以反覆執行而不會導致資料重複。每次作業運行時,系統會自動比較源端(AWS Glue)和目標端(DLF)的中繼資料。僅當源端的中繼資料在目標端缺失或存在差異時,系統才會觸發新增或更新操作。如果目標端的中繼資料在源端不存在,系統將自動進行清理。這一機制確保了中繼資料的一致性。該遷移方案已被多個企業成功應用。遷移流程圖如下所示。

遷移流程說明如下:

  1. 提取AWS Glue的中繼資料:使用Spark串連AWS Glue API,讀取其中繼資料資訊,包括庫、表、分區和函數等。

  2. 轉換和處理資料:根據遷移邏輯(包括累加式更新或全量同步)對提取的中繼資料進行可能的轉換和處理操作,以適配目標端阿里雲DLF的格式或結構。

  3. 載入資料至DLF:使用DLF API,將處理後的中繼資料上傳到阿里雲DLF中。

注意事項

根據以往客戶經驗,對於包含約500萬個分區的中繼資料規模的資料集,首次運行該Spark作業進行遷移時,處理時間可能需要大約2~3小時。在後續的常規運行中,預期在20分鐘以內即可完成。

遷移流程

步驟一:下載工具包

  • 方式一:單擊glue-1.0-SNAPSHOT-jar-with-dependencies.jar,下載工具包。

  • 方式二:在命令列終端執行以下命令,下載工具包。

    wget http://dlf-lib.oss-cn-hangzhou.aliyuncs.com/jars/glue-1.0-SNAPSHOT-jar-with-dependencies.jar

步驟二:準備設定檔

  1. 在您的本機電腦上,建立或編輯一個名為application.properties的設定檔。

    該檔案包含了AWS和阿里雲EMR所需的訪問憑證,以及其他必要的相關配置資訊。

  2. ## AWS的AccessKey ID和AccessKey Secret。如果任務運行在AWS EMR叢集上可以不填寫這些憑據,否則必填。
    aws.accessKeyId=xxxxx
    aws.secretAccessKey=xxxxxx
    ## AWS地區。
    aws.region=eu-central-1
    ## (必填)AWS Glue資料目錄的ID,預設是AWS帳號ID。
    aws.catalogId=xxxx
    
    ## (可選)庫過濾條件:遷移的資料庫名稱。如果未設定該參數,則預設會遷移所有資料庫。
    aws.databases=db1,db2
    
    ## (可選)表過濾條件:遷移表名首碼與指定值相匹配的表。可以通過逗號分隔的方式來指定多個表首碼,且各首碼之間不能有空格。
    aws.table.filter.prefix=ods_,adm_
    
    ## (可選)分區過濾條件:遷移特定分區的資料。支援設定多條規則。如果未設定該參數,則預設會全量遷移該表的所有分區資料。
    aws.partition.filter.<庫名>.<表名>=dt>=20220101
    
    ## (必填)固定值。
    mode=increment
    comparePartition=true
    
    ## (必填)阿里雲帳號的AccessKey ID和AccessKey Secret,需要有DLF許可權。
    aliyun.accessKeyId=xxxx
    aliyun.secretAccessKey=xxxxxxx
    aliyun.region=eu-central-1
    aliyun.endpoint=dlf.eu-central-1.aliyuncs.com
    aliyun.catalogId=xxxx(預設DLF的Catalog為UID。)
    
    ## (必填)表location首碼替換規則,可以設定多個索引值對,用於將源位置替換為目標位置。
    location.convertMap={"s3://xxx-eu-central-1/glue-migrate/":"oss://xxx-eu-central-1/glue-migrate/"}
    
    ## (可選)輸出結果的儲存路徑,記錄本次遷移任務的詳細動作記錄。
    result.output.path=oss://<bucket>/path1/
  3. 設定檔準備好之後,需要將其上傳至指定的位置。例如,上傳至本地HDFS,阿里雲OSSAmazon S3上。

    本文樣本是上傳至阿里雲OSS。例如,oss://<bucket>/path/application.properties。

步驟三:提交Spark作業

需要在已經配置好Spark環境的系統上提交Spark作業。您可以選擇在AWS或阿里雲EMRSpark環境中執行,但必須確保運行環境能夠訪問公網。建議在Spark2版本的環境中提交Spark作業。

本文樣本是在阿里雲EMR叢集的Master中提交Spark作業。建立和登入EMR叢集的具體操作,請參見建立叢集登入叢集。提交Spark作業樣本如下所示。

spark-submit  --name migrate --class com.aliyun.dlf.migrator.glue.GlueToDLFApplication --deploy-mode cluster  --conf spark.executor.instances=10  glue-1.0-SNAPSHOT-jar-with-dependencies.jar oss://<bucket>/path/application.properties 

其中,涉及參數如下:

  • name:指定作業的名稱,您可以自訂。

  • class:固定填com.aliyun.dlf.migrator.glue.GlueToDLFApplication。

  • deploy-mode:cluster或者client均可。

  • spark.executor.instances:按需設定,增加instance數量會提高任務運行速度。

  • glue-1.0-SNAPSHOT-jar-with-dependencies.jar:為步驟一種下載的工具包。

  • oss://<bucket>/path/application.properties:為步驟二中上傳的設定檔的地址,請您根據實際情況替換。

步驟四:查看結果

YARN UI中查看作業的driverstdout日誌。訪問Web UI詳情,請參見訪問連結與連接埠

image

日誌包含以下內容。

image

  • itemType: 指標項的類型,包括databasetablefunctionpartition四種。

  • itemName: 對應的庫名、表名或分區名。

  • diffResult: 差異類型。包括:

    • dlfNew:表示在阿里雲DLF中存在而在AWS Glue中不存在的中繼資料。該差異類型需要在DLF中執行刪除(delete)操作。

    • glueNew:表示在AWS Glue中存在而在阿里雲DLF中不存在的中繼資料。該差異類型需要在DLF中執行建立(create)操作。

    • needUpdate:表示在AWS Glue和阿里雲DLF中都存在該中繼資料,但是內容有差異,因此需要更新(update)操作來同步兩邊的中繼資料。

  • isSuccess: 表示補償操作是否成功執行。

  • errorMsg: 如果操作未能成功執行,這裡將提供錯誤資訊的詳情。