元數(shù)據(jù)導(dǎo)出
DLF提供了元數(shù)據(jù)導(dǎo)出工具,可以幫您將DLF元數(shù)據(jù)導(dǎo)出到Hive Metastore元數(shù)據(jù)中。
前提條件
已有一個(gè)EMR集群,且Metastore服務(wù)配置的元數(shù)據(jù)庫(kù)與導(dǎo)出的目標(biāo)RDS庫(kù)要一致。同步任務(wù)會(huì)使用EMR集群的Metastore服務(wù),以Spark作業(yè)的方式運(yùn)行在該EMR集群上實(shí)現(xiàn)導(dǎo)出。
所有元數(shù)據(jù)的location路徑建議都在oss上,如果location的路徑為hdfs,則庫(kù)表location的hdfs namespace必須與EMR集群的hdfs namespace一致,否則導(dǎo)出會(huì)報(bào)錯(cuò)(即location為hdfs時(shí),不支持跨集群元數(shù)據(jù)導(dǎo)出)。
請(qǐng)保證目標(biāo)RDS庫(kù)中已經(jīng)存在元數(shù)據(jù)表,RDS元數(shù)據(jù)初始化參照配置自建RDS。
操作步驟
1. 準(zhǔn)備配置文件
請(qǐng)參照如下示例,根據(jù)自己的環(huán)境準(zhǔn)備一份yaml文件,yaml文件準(zhǔn)備好之后,上傳到自己的一個(gè)oss路徑下。
!!com.aliyun.dlf.migrator.app.config.MigratorConfig
clientInfo:
accessKeyId: <替換為access key>
accessKeySecret: <替換為access key secret>
endPoint: dlf-vpc.cn-hangzhou.aliyuncs.com
regionId: cn-hangzhou
catalogId: <替換為catalogId,默認(rèn)為阿里云賬號(hào)uid>
mysql:
connectionUri: jdbc:mysql://emr-header-1:3306/hivemeta
driver: com.mysql.cj.jdbc.Driver
userName: root
password: xxxx
runOptions:
batchSize: 100
lowerCaseTableNames: false
schema: hivemeta
records: oss://xxxx/migrator/validate/log/
objectTypes:
- database
- table
- partition
- function
operations:
- validate
fixIfInConsistence: true
fixMode: to_hive
validateDatabases: [db1,db2]
excludeTables: [aa,bb]
excludeTablePrefixes: [xx,yy]
ignoreValidateCreateTime: true
skipFixTime: 1
ignoreDropOperation: false
配置項(xiàng)說明
DLF SDK Client 相關(guān)信息
參數(shù)名稱 | 是否必填 | 描述 |
accessKeyId | 必填 | 用戶阿里云賬號(hào)的 Access Key Id。 |
asscessKeySecret | 必填 | 用戶阿里云賬號(hào)的 Access Key Secret。 |
endPoint | 必填 | DLF的EndPoint;一般為 dlf-vpc.[region-id].aliyuncs.com。 |
catalog | 必填 | DLF數(shù)據(jù)目錄。 |
阿里云賬號(hào)需要有讀寫 DLF 元數(shù)據(jù)所有庫(kù)和表的權(quán)限,如ListDatabase、ListTables等(權(quán)限配置可以在DLF控制臺(tái)->數(shù)據(jù)權(quán)限->數(shù)據(jù)授權(quán)進(jìn)行操作)。
MySQL 元數(shù)據(jù)庫(kù)相關(guān)信息
參數(shù)名稱 | 是否必選 | 參數(shù)說明 |
connectionUrl | 必選 | 元數(shù)據(jù)庫(kù) JDBC 連接信息。 |
driver | 必選 | mysql driver,一般不需要改。 |
userName | 必選 | 數(shù)據(jù)庫(kù)用戶名。 |
password | 必選 | 數(shù)據(jù)庫(kù)密碼。 |
RunOptions 運(yùn)行時(shí)參數(shù)
參數(shù)名稱 | 是否必選 | 參數(shù)說明 |
schema | 必選 | hive元數(shù)據(jù)庫(kù)的名稱。 說明 MySQL connectionUrl中的庫(kù)名要與schema保持一致,修改時(shí)要同時(shí)修改。 |
batchSize | 必選 | 批量調(diào)用 DLF SDK 的批次大小,最大不能超過 500,太大可能會(huì)超時(shí),太小效率慢,一般 100 左右可以。 |
lownerCaseTableNames | 必選 | 客戶的RDS元數(shù)據(jù)庫(kù)里面的表是大寫還是小寫,目前需要客戶自行判斷。false表示RDS元數(shù)據(jù)表名為大寫。 |
records | 必選 | 工具的運(yùn)行結(jié)果日志存放路徑,日志包含處理的記錄和錯(cuò)誤信息。 |
objectTypes | 必選 | 導(dǎo)出對(duì)象的類型列表,可以包含 database、function、table、partition。 |
operations | 必選 | 固定填validate。 |
fixIfInConsistence | 必選 | 固定填true。 |
fixMode | 必選 | to_hive,以DLF元數(shù)據(jù)為基準(zhǔn),對(duì)比hive元數(shù)據(jù);to_dlf, 以hive元數(shù)據(jù)為基準(zhǔn),對(duì)比DLF元數(shù)據(jù)。 |
validateDatabases | 可選 | 指定對(duì)比的庫(kù)名列表,則只會(huì)對(duì)比該列表下的庫(kù)并進(jìn)行補(bǔ)償。 |
excludeTablePrefixes | 可選 | 對(duì)比是排除的表列表,則不會(huì)對(duì)比列表下的表。 |
excludeTables | 可選 | 對(duì)比時(shí)排除的表前綴列表,則不會(huì)對(duì)比列表下前綴開頭的表。 |
compareTotalNumber | 可選 | 默認(rèn)為false。是否輸出DLF與RDS兩邊元數(shù)據(jù)數(shù)量的最終比對(duì)結(jié)果。 |
ignoreValidateCreateTime | 可選 | 對(duì)比兩邊元數(shù)據(jù)時(shí),忽略對(duì)比create time。 |
skipFixTime(單位min) | 可選 | 只對(duì)比skipFixTime之前創(chuàng)建的元數(shù)據(jù),skipFixTime之間之內(nèi)創(chuàng)建的表則不會(huì)進(jìn)行對(duì)比。默認(rèn)值為4h。 |
ignoreDropOperation | 可選 | 如果不想刪除目標(biāo)元數(shù)據(jù),則該選項(xiàng)設(shè)置為true。 |
locationMappings | 可選 | 對(duì)象 location 映射支持,應(yīng)用于要修改替換database、table、partition 等對(duì)象 location 信息的場(chǎng)景。 |
source | 可選 | 表示要替換的路徑(建議/結(jié)尾),示例如下:
|
target | 可選 | 表示目標(biāo)路徑,示例如下:
|
hiveConfPath | 可選 | 集群環(huán)境中hive配置文件地址,默認(rèn)/etc/ecm/hive-conf/hive-site.xml。 |
kerberosInfo | 可選 | 如果任務(wù)運(yùn)行在Kerberos集群,則需要runOptions下添加此配置:
|
2. 準(zhǔn)備執(zhí)行導(dǎo)出Spark任務(wù)
登錄到EMR集群header節(jié)點(diǎn)。
獲取導(dǎo)出工具的jar包。
wget https://dlf-lib.oss-cn-hangzhou.aliyuncs.com/migrator_jar/application-1.1.jar
編寫Spark任務(wù)執(zhí)行腳本。
vim /root/migrator_validate.sh
填寫如下內(nèi)容。
#!/bin/bash
source /etc/profile
spark-submit --master yarn --deploy-mode client --driver-memory 12G --executor-memory 8G --executor-cores 2 --num-executors 4 --conf spark.sql.shuffle.partitions=200 --conf spark.sql.adaptive.enabled=false --class com.aliyun.dlf.migrator.app.MigratorApplication application-1.1.jar oss://xxxx/migrator_config_validate.yml
最后的配置文件參數(shù),即為上一步驟上傳到oss的配置文件路徑。
修改執(zhí)行腳本權(quán)限。
chmod +x /root/migrator_validate.sh
3. 運(yùn)行導(dǎo)出任務(wù)
手動(dòng)運(yùn)行:直接運(yùn)行上述腳本。
定時(shí)運(yùn)行:
crontab -e
0 22 * * * nohup sh /root/migrator_validate.sh > /root/validate.txt 2>&1 &
示例中配置的cron為每天晚上22:00執(zhí)行。