遷移AWS Glue Data Catalog中繼資料至阿里雲DLF
本文介紹了如何將AWS Glue Data Catalog中的中繼資料,包括但不限於庫、表和分區等資訊,無縫遷移到阿里雲Data Lake Formation(DLF)。通過實施本次遷移,您能夠充分利用DLF統一的中繼資料管理、許可權與安全管理以及湖管理能力,快速在阿里雲上構建並營運安全、統一的雲原生資料湖環境。
背景資訊
該遷移支援增量式的更新,確保可以反覆執行而不會導致資料重複。每次作業運行時,系統會自動比較源端(AWS Glue)和目標端(DLF)的中繼資料。僅當源端的中繼資料在目標端缺失或存在差異時,系統才會觸發新增或更新操作。如果目標端的中繼資料在源端不存在,系統將自動進行清理。這一機制確保了中繼資料的一致性。該遷移方案已被多個企業成功應用。遷移流程圖如下所示。
遷移流程說明如下:
提取AWS Glue的中繼資料:使用Spark串連AWS Glue API,讀取其中繼資料資訊,包括庫、表、分區和函數等。
轉換和處理資料:根據遷移邏輯(包括累加式更新或全量同步)對提取的中繼資料進行可能的轉換和處理操作,以適配目標端阿里雲DLF的格式或結構。
載入資料至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
步驟二:準備設定檔
在您的本機電腦上,建立或編輯一個名為
application.properties的設定檔。該檔案包含了AWS和阿里雲EMR所需的訪問憑證,以及其他必要的相關配置資訊。
設定檔準備好之後,需要將其上傳至指定的位置。例如,上傳至本地HDFS,阿里雲OSS或Amazon S3上。
本文樣本是上傳至阿里雲OSS。例如,oss://<bucket>/path/application.properties。
## 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/步驟三:提交Spark作業
需要在已經配置好Spark環境的系統上提交Spark作業。您可以選擇在AWS或阿里雲EMR的Spark環境中執行,但必須確保運行環境能夠訪問公網。建議在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中查看作業的driver的stdout日誌。訪問Web UI詳情,請參見訪問連結與連接埠。

日誌包含以下內容。

itemType: 指標項的類型,包括database、table、function、partition四種。itemName: 對應的庫名、表名或分區名。diffResult: 差異類型。包括:dlfNew:表示在阿里雲DLF中存在而在AWS Glue中不存在的中繼資料。該差異類型需要在DLF中執行刪除(delete)操作。glueNew:表示在AWS Glue中存在而在阿里雲DLF中不存在的中繼資料。該差異類型需要在DLF中執行建立(create)操作。needUpdate:表示在AWS Glue和阿里雲DLF中都存在該中繼資料,但是內容有差異,因此需要更新(update)操作來同步兩邊的中繼資料。
isSuccess: 表示補償操作是否成功執行。errorMsg: 如果操作未能成功執行,這裡將提供錯誤資訊的詳情。