更新时间:2024-09-13 GMT+08:00
分享

源端为MySQL,目的端为MRS Hudi

本章节适用于配置实时处理集成作业MySQL到MRS Hudi链路,期望将源端1个或多个MySQL实例的数据实时同步到目的端为MRS Hudi数据库的场景。

  • MySql源端配置。

    支持选择源端多库多表迁移。

  • 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 '用户名'@'%';

整库场景

  1. 源端配置。
    添加数据源,选择需要迁移的MySQL表。
    图1 选择库表

    库与表均支持自定义选择,即可选择一库一表,也可选择多库多表。

  2. 目标端配置。
    图2 配置目标端参数
    • 源库表和目标匹配策略:
      • 库匹配策略:配置目标数据库的匹配策略,使数据按照规划迁移至目标库。
        用户需要提前创建对应数据库,否则可能导致后续自动建表失败。
        • 与来源库同名:会迁移至目的端对应与来源库同名的数据库中。
        • 自定义:支持用户指定目的端库名,也支持通过#{source_db_name}给源数据库名添加自定义字段变成目的端Hudi表的库名。
      • 表匹配策略:配置目标数据表的匹配策略,使数据按照规划迁移至目标表。

        用户不需要提前创建对应数据表,后续作业时自动建表。

        • 与来源表同名:会迁移至目的端对应与来源表同名的表中。
        • 自定义:支持用户指定目的端表名,也支持通过内置参数#{source_table_name}给源表名添加前后缀,变成目的端Hudi表的表名。
    • 目标数据源配置:
      • 数据存储路径: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)、选择字段类型、填写字段值。

          用户可同时添加多个附加字段。

        • 自动建表:单击“自动建表”为列表中的表按照已配置规则自动建表。成功后表建立方式会显示为使用已有表。

分库分表场景

对于不同库上表可以聚合为一个表,同步时会被统一写入一个目标表中,匹配的分库分表需要保证结构的一致性。

  1. 源端配置。
    图4 添加逻辑表

    已添加的逻辑表支持预览,单击操作列的预览即可。

    预览逻辑表,源表数量越多,等待时间可能越长,需要几分钟到几十分钟不等。

    图5 逻辑表预览
  2. 目标端配置。
    • 源库表和目标匹配策略:
      • 目标端库名:自定义目标端库名。
      • 表匹配策略:默认为与源端逻辑表同名,不可更改。
    • 目标数据源配置:
      • 数据存储路径: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)、选择字段类型、填写字段值。

          用户可同时添加多个附加字段。

        • 自动建表:单击“自动建表”为列表中的表按照已配置规则自动建表。成功后表建立方式会显示为使用已有表。

相关文档