DLF提供了元数据导出工具,可以帮您将DLF元数据导出到Hive Metastore元数据中。
前提条件
- 已有一个EMR集群,且Metastore服务配置的元数据库与导出的目标RDS库要一致。同步任务会使用EMR集群的Metastore服务,以Spark作业的方式运行在该EMR集群上实现导出。 
- 所有元数据的location路径建议都在oss上,如果location的路径为hdfs,则库表location的hdfs namespace必须与EMR集群的hdfs namespace一致,否则导出会报错(即location为hdfs时,不支持跨集群元数据导出)。 
- 请保证目标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元数据,将DLF元数据迁移到Hive Metastore。 | 
| validateDatabases | 可选 | 指定对比的库名列表,则只会对比该列表下的库并进行补偿。 | 
| excludeTablePrefixes | 可选 | 对比是排除的表列表,则不会对比列表下的表。 | 
| excludeTables | 可选 | 对比时排除的表前缀列表,则不会对比列表下前缀开头的表。 | 
| compareTotalNumber | 可选 | 默认为false。是否输出DLF与RDS两边元数据数量的最终比对结果。 | 
| ignoreValidateCreateTime | 可选 | 对比两边元数据时,忽略对比create time。 | 
| skipFixTime(单位min) | 可选 | 只对比skipFixTime之前创建的元数据,skipFixTime之间之内创建的表则不会进行对比。默认值为4h。 | 
| ignoreDropOperation | 可选 | 如果不想删除目标元数据,则该选项设置为true。 | 
| locationMappings | 可选 | 对象 location 映射支持,应用于要修改替换database、table、partition 等对象 location 信息的场景。 | 
| source | 可选 | 表示要替换的路径(建议/结尾),示例如下:  | 
| target | 可选 | 表示目标路径,示例如下:  | 
| hiveConfPath | 可选 | 集群环境中hive配置文件地址,默认/etc/ecm/hive-conf/hive-site.xml。 | 
| kerberosInfo | 可选 | 如果任务运行在Kerberos集群,则需要runOptions下添加此配置:  | 
2. 准备执行导出Spark任务
- 登录到EMR集群header节点。 
- 获取导出工具的jar包。 
wget https://dlf-lib.oss-cn-hangzhou.aliyuncs.com/migrator_jar/application-1.1.jar- 编写Spark任务执行脚本。 
vim /root/migrator_validate.sh- 填写如下内容。 
#!/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的配置文件路径。
- 修改执行脚本权限。 
chmod +x /root/migrator_validate.sh3. 运行导出任务
手动运行:直接运行上述脚本。
定时运行:
crontab -e
0 22 * * * nohup sh /root/migrator_validate.sh > /root/validate.txt 2>&1 &示例中配置的cron为每天晚上22:00执行。