元数据导出

DLF提供了元数据导出工具,可以帮您将DLF元数据导出到Hive Metastore元数据中。

前提条件

  1. 已有一个EMR集群,且Metastore服务配置的元数据库与导出的目标RDS库要一致。同步任务会使用EMR集群的Metastore服务,以Spark作业的方式运行在该EMR集群上实现导出。

  2. 所有元数据的location路径建议都在oss上,如果location的路径为hdfs,则库表location的hdfs namespace必须与EMR集群的hdfs namespace一致,否则导出会报错(即location为hdfs时,不支持跨集群元数据导出)。

  3. 请保证目标RDS库中已经存在元数据表,RDS元数据初始化参照配置自建RDS

操作步骤

1. 准备配置文件

请参照如下示例,根据自己的环境准备一份yaml文件,yaml文件准备好之后,上传到自己的一个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,默认为阿里云账号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

配置项说明

DLF SDK Client 相关信息

参数名称

是否必填

描述

accessKeyId

必填

用户阿里云账号的 Access Key Id。

asscessKeySecret

必填

用户阿里云账号的 Access Key Secret。

endPoint

必填

DLF的EndPoint;一般为 dlf-vpc.[region-id].aliyuncs.com。

catalog

必填

DLF数据目录。

说明

阿里云账号需要有读写 DLF 元数据所有库和表的权限,如ListDatabase、ListTables等(权限配置可以在DLF控制台->数据权限->数据授权进行操作)。

MySQL 元数据库相关信息

参数名称

是否必选

参数说明

connectionUrl

必选

元数据库 JDBC 连接信息。

driver

必选

mysql driver,一般不需要改。

userName

必选

数据库用户名。

password

必选

数据库密码。

RunOptions 运行时参数

参数名称

是否必选

参数说明

schema

必选

hive元数据库的名称。

说明

MySQL connectionUrl中的库名要与schema保持一致,修改时要同时修改。

batchSize

必选

批量调用 DLF SDK 的批次大小,最大不能超过 500,太大可能会超时,太小效率慢,一般 100 左右可以。

lownerCaseTableNames

必选

客户的RDS元数据库里面的表是大写还是小写,目前需要客户自行判断。false表示RDS元数据表名为大写。

records

必选

工具的运行结果日志存放路径,日志包含处理的记录和错误信息。

objectTypes

必选

导出对象的类型列表,可以包含 database、function、table、partition。

operations

必选

固定填validate。

fixIfInConsistence

必选

固定填true。

fixMode

必选

to_hive,以DLF元数据为基准,对比hive元数据;to_dlf, 以hive元数据为基准,对比DLF元数据。

validateDatabases

可选

指定对比的库名列表,则只会对比该列表下的库并进行补偿。

excludeTablePrefixes

可选

对比是排除的表列表,则不会对比列表下的表。

excludeTables

可选

对比时排除的表前缀列表,则不会对比列表下前缀开头的表。

compareTotalNumber

可选

默认为false。是否输出DLF与RDS两边元数据数量的最终比对结果。

ignoreValidateCreateTime

可选

对比两边元数据时,忽略对比create time。

skipFixTime(单位min)

可选

只对比skipFixTime之前创建的元数据,skipFixTime之间之内创建的表则不会进行对比。默认值为4h。

ignoreDropOperation

可选

如果不想删除目标元数据,则该选项设置为true。

locationMappings

可选

对象 location 映射支持,应用于要修改替换database、table、partition 等对象 location 信息的场景。

source

可选

表示要替换的路径(建议/结尾),示例如下:

runOptions:
 locationMappings:
 source: hdfs://emr-header-1:9000/uesr/hive/
 target: oss://hive/warehouse/

target

可选

表示目标路径,示例如下:

runOptions:
 locationMappings:
 source: hdfs://emr-header-1:9000/uesr/hive/
 target: oss://hive/warehouse/

hiveConfPath

可选

集群环境中hive配置文件地址,默认/etc/ecm/hive-conf/hive-site.xml。

kerberosInfo

可选

如果任务运行在Kerberos集群,则需要runOptions下添加此配置:

runOptions:
 kerberosInfo:
 principal: xxx/xxx@xxx.COM
 keytab: /xxx/xxx.keytab

2. 准备执行导出Spark任务

  1. 登录到EMR集群header节点。

  2. 获取导出工具的jar包。

wget https://dlf-lib.oss-cn-hangzhou.aliyuncs.com/migrator_jar/application-1.1.jar
  1. 编写Spark任务执行脚本。

vim /root/migrator_validate.sh
  1. 填写如下内容。

#!/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

最后的配置文件参数,即为上一步骤上传到oss的配置文件路径。

  1. 修改执行脚本权限。

chmod +x /root/migrator_validate.sh

3. 运行导出任务

手动运行:直接运行上述脚本。

定时运行

crontab -e
0 22 * * * nohup sh /root/migrator_validate.sh > /root/validate.txt 2>&1 &
说明

示例中配置的cron为每天晚上22:00执行。