源端为MySQL,目的端为MRS Hudi
本章节适用于配置实时处理集成作业MySQL到MRS Hudi链路,期望将源端1个或多个MySQL实例的数据实时同步到目的端为MRS Hudi数据库的场景。
- DDL支持新增列。
- Hudi目的端配置。
- 支持配置源端与目的端库名与表名映射的规则,方便用户对Hudi库名表名做重命名。
- 同时迁移Hudi表到HDFS和OBS。
- 支持对Hudi的自动建表。
- 支持用户为Hudi表添加简单的附加字段。
- 支持用户配置Hudi表的分区信息,包括定义“无分区”“时间分区”“自定义分区”Hudi表。
- 支持用户按需定义全局Hudi表配置,同时支持差异化定义单张Hudi表配置。
- 开箱即用,内置Hudi表的一些默认配置,如compaction行为、表类型等。
- 支持对数据的软删除。
约束限制
- 对于同一张Hudi表,必须确保同一时间段只有一个集成作业在写入,否则会有Hudi的数据写入冲突,导致作业失败。
- 源端MySql需要配置最小权限:SELECT, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT,即执行SQL:
GRANT SELECT, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '用户名'@'%';
整库场景
- 源端配置。
库与表均支持自定义选择,即可选择一库一表,也可选择多库多表。
- 目标端配置。
图2 配置目标端参数
- 源库表和目标匹配策略:
- 目标数据源配置:
- 数据存储路径:Hudi数据存储的基础路径,只对自动建表生效。每张目的端表会在基础路径下创建子目录,支持HDFS或OBS路径。
- OBS格式:obs://{桶名}。
- HDFS格式:/tmp。
- Hudi表属性全局配置:单击“查看编辑”配置Hudi表属性全局配置。
“Hudi全局配置”作用于所有Hudi表,可配置的Hudi配置项参考Hudi官网介绍。
“Hudi全局配置”优先级低于单表“表属性编辑”中的配置,存在相同配置项时会被覆盖。
- 源表与目标表映射:
图3 配置源表与目标表映射
- Hudi表必须设置“同步主键”,在源端为非主键表时,必须在字段映射阶段手动勾选主键。
- 表属性编辑:单击操作列“表属性编辑”可配置Hudi表属性,包含表类型,分区类型及表自定义属性。
表类型:MERGE_ON_READ、COPY_ON_WRITE。
分区类型:无分区、时间分区、自定义分区。
其中时间分区需要用户指定一个源端表名,选择一个时间转换格式。
比如时间分区用户指定一个源端表名src_col_1,选择一个时间转换格式,日(yyyyMMdd)、月(yyyyMM)、年(yyyy),自动建表时会在Hudi表默认创建一个cdc_partition_key的字段,系统会根据配置的时间转换格式将源端字段(src_col_1)的值格式化后写入cdc_partition_key中。
自定义分区:选择源端的某个字段或多个字段作为分区,多个分区通过英文半角逗号”,”分割。
- 附加字段编辑:单击操作列“附加字段编辑”可为迁移后的Hudi表中增加自定义字段,附加字段会成为一个新的字段加入到Hudi表的建表中。
表1 附加字段值支持情况 类型
示例
常量
-
内置变量
- 源端host ip地址:source.host
- 源端schema名称:mgr.source.schema
- 源端table名称:mgr.source.table
- 目的端schema名称:mgr.target.schema
- 目的端table名称:mgr.target.table
字段变量
-
udf方法
- substring(#col, pos[, len]): 截取源端col列的子串, 范围在[pos, pos+len)。
- date_format(#col, time_format[, src_tz, dst_tz]): 将源端col列按time_format格式化, 可选转换时区。
- now([tz]): 获取指定时区的当前时间。
- if(cond_exp, str1, str2): 满足条件表达式cond_exp时返回str1, 否则返回str2。
- concat(#col[, #str, ...]): 拼接多个参数, 可为源端列或字符串。
- from_unixtime(#col[, time_format]): 将unix时间戳按time_format格式化。
- unix_timestamp(#col[, precision, time_format]): 将时间转成unix时间戳, 可显式定义时间格式及转换后精度。
对于新建的表,用户可以在已有的源表字段基础上添加附加字段,可以自定义字段名(如custom_defined_col)、选择字段类型、填写字段值。
用户可同时添加多个附加字段。
- 自动建表:单击“自动建表”为列表中的表按照已配置规则自动建表。成功后表建立方式会显示为使用已有表。
- 数据存储路径:Hudi数据存储的基础路径,只对自动建表生效。每张目的端表会在基础路径下创建子目录,支持HDFS或OBS路径。
分库分表场景
对于不同库上表可以聚合为一个表,同步时会被统一写入一个目标表中,匹配的分库分表需要保证结构的一致性。
- 源端配置。
图4 添加逻辑表
已添加的逻辑表支持预览,单击操作列的预览即可。
预览逻辑表,源表数量越多,等待时间可能越长,需要几分钟到几十分钟不等。
图5 逻辑表预览
- 目标端配置。
- 源库表和目标匹配策略:
- 目标端库名:自定义目标端库名。
- 表匹配策略:默认为与源端逻辑表同名,不可更改。
- 目标数据源配置:
- 数据存储路径:Hudi数据存储的基础路径,只对自动建表生效。每张目的端表会在基础路径下创建子目录,支持HDFS或OBS路径。格式如:OBS:obs://{桶名}、HDFS:/开头。
- Hudi表属性全局配置:单击“查看编辑”配置Hudi表属性全局配置。
“Hudi全局配置”作用于所有Hudi表,可配置的Hudi配置项参考Hudi官网介绍。
“Hudi全局配置”优先级低于单表“表属性编辑”中的配置,存在相同配置项时会被覆盖。
- 源表与目标表映射:
图6 配置源表与目标表映射
- Hudi表必须设置“同步主键”,在源端为非主键表时,必须在字段映射阶段手动勾选主键。
- 表属性编辑:单击操作列“表属性编辑”可配置Hudi表属性,包含表类型,分区类型及表自定义属性。
表类型:MERGE_ON_READ、COPY_ON_WRITE。
分区类型:无分区、时间分区、自定义分区。
其中时间分区需要用户指定一个源端表名,选择一个时间转换格式。
比如时间分区用户指定一个源端表名src_col_1,选择一个时间转换格式,日(yyyyMMdd)、月(yyyyMM)、年(yyyy),自动建表时会在Hudi表默认创建一个cdc_partition_key的字段,系统会根据配置的时间转换格式将源端字段(src_col_1)的值格式化后写入cdc_partition_key中。
自定义分区:选择源端的某个字段或多个字段作为分区,多个分区通过英文半角逗号”,”分割。
- 附加字段编辑:单击操作列“附加字段编辑”可为迁移后的Hudi表中增加自定义字段,附加字段会成为一个新的字段加入到Hudi表的建表中。
表2 附加字段值支持情况 类型
示例
常量
-
内置变量
- 源端host ip地址:source.host
- 源端schema名称:mgr.source.schema
- 源端table名称:mgr.source.table
- 目的端schema名称:mgr.target.schema
- 目的端table名称:mgr.target.table
字段变量
-
udf方法
- substring(#col, pos[, len]): 截取源端col列的子串, 范围在[pos, pos+len)。
- date_format(#col, time_format[, src_tz, dst_tz]): 将源端col列按time_format格式化, 可选转换时区。
- now([tz]): 获取指定时区的当前时间。
- if(cond_exp, str1, str2): 满足条件表达式cond_exp时返回str1, 否则返回str2。
- concat(#col[, #str, ...]): 拼接多个参数, 可为源端列或字符串。
- from_unixtime(#col[, time_format]): 将unix时间戳按time_format格式化。
- unix_timestamp(#col[, precision, time_format]): 将时间转成unix时间戳, 可显式定义时间格式及转换后精度。
对于新建的表,用户可以在已有的源表字段基础上添加附加字段,可以自定义字段名(如custom_defined_col)、选择字段类型、填写字段值。
用户可同时添加多个附加字段。
- 自动建表:单击“自动建表”为列表中的表按照已配置规则自动建表。成功后表建立方式会显示为使用已有表。
- 源库表和目标匹配策略: