华为云用户手册

  • 创建 CDM 集群并绑定EIP 如果是独立CDM服务,参考创建集群创建CDM集群;如果是作为 DataArts Studio 服务CDM组件使用,参考创建集群创建CDM集群。 关键配置如下: CDM集群的规格,按待迁移的数据量选择,一般选择cdm.medium即可,满足大部分迁移场景。 CDM集群所在VPC、子网、安全组,选择与 MRS 集群所在的网络一致。 CDM集群创建完成后,选择集群操作列的“绑定弹性IP”,CDM通过EIP访问MRS HDFS。 图1 集群列表 如果用户对本地数据源的访问通道做了SSL加密,则CDM无法通过弹性IP连接数据源。
  • 创建CDM集群并绑定EIP 如果是独立CDM服务,参考创建集群创建CDM集群;如果是作为DataArts Studio服务CDM组件使用,参考创建集群创建CDM集群。 关键配置如下: CDM集群的规格,按待迁移的数据量选择,一般选择cdm.medium即可,满足大部分迁移场景。 CDM集群创建完成后,选择集群操作列的“绑定弹性IP”,CDM通过EIP访问MySQL。 图1 集群列表 如果用户对本地数据源的访问通道做了SSL加密,则CDM无法通过弹性IP连接数据源。
  • 整库迁移支持的数据源类型 整库迁移适用于将本地数据中心或在E CS 上自建的数据库,同步到云上的数据库服务或大数据服务中,适用于数据库离线迁移场景,不适用于在线实时迁移。 数据集成支持整库迁移的数据源如表2所示。 表2 整库迁移支持的数据源 数据源分类 数据源 读取 写入 说明 数据仓库 数据仓库服务(DWS) 支持 支持 - Hadoop (仅支持本地存储,不支持存算分离场景,不支持Ranger场景,不支持ZK开启SSL场景) MRS HBase 支持 支持 整库迁移仅支持导出到MRS HBase。 建议使用的版本: 2.1.X 1.3.X 当前暂不支持对接“Kerberos加密类型”为“aes256-sha2,aes128-sha2”的MRS集群。如需对接MRS集群,请注意“Kerberos加密类型”应为“aes256-sha1,aes128-sha1”。 MRS Hive 支持 支持 整库迁移仅支持导出到关系型数据库。 暂不支持2.x版本,建议使用的版本: 1.2.X 3.1.X 当前暂不支持对接“Kerberos加密类型”为“aes256-sha2,aes128-sha2”的MRS集群。如需对接MRS集群,请注意“Kerberos加密类型”应为“aes256-sha1,aes128-sha1”。 Apache HBase 支持 不支持 建议使用的版本: 2.1.X 1.3.X Apache Hive 支持 不支持 整库迁移仅支持导出到关系型数据库。 暂不支持2.x版本,建议使用的版本: 1.2.X 3.1.X MRS Hudi 支持 支持 支持本地存储、存算分离场景。 暂不支持2.x版本,建议使用的版本: 1.2.X 3.1.X 当前暂不支持对接“Kerberos加密类型”为“aes256-sha2,aes128-sha2”的MRS集群。如需对接MRS集群,请注意“Kerberos加密类型”应为“aes256-sha1,aes128-sha1”。 关系数据库 云数据库 MySQL 支持 支持 不支持OLTP到OLTP迁移,此场景推荐通过 数据复制服务 DRS进行迁移。 云数据库 PostgreSQL 支持 支持 云数据库 SQL Server 支持 支持 MySQL 支持 不支持 PostgreSQL 支持 不支持 Microsoft SQL Server 支持 不支持 Oracle 支持 不支持 NoSQL 分布式缓存服务(DCS) 不支持 支持 仅支持MRS到DCS迁移。 公测中 表格存储服务 (CloudTable) 支持 支持 - FusionInsight HBase 支持 不支持 建议使用的版本: 2.1.X 1.3.X FusionInsight Hive 支持 不支持 整库迁移仅支持导出到关系型数据库。 暂不支持2.x版本,建议使用的版本: 1.2.X 3.1.X SAP HANA 支持 不支持 仅支持2.00.050.00.1592305219版本。 仅支持Generic Edition。 不支持BW/4 FOR HANA。 仅支持英文字母的数据库名、表名与列名,不支持存在空格、符号等特殊字符。 仅支持日期、数字、布尔、字符(除SHORTTEXT) 类型的数据类型,不支持二进制类型等其他数据类型。 迁移时不支持目的端自动建表。 达梦数据库 DM 支持 不支持 仅支持导出到DWS、Hive 文档数据库服务(DDS) 支持 支持 仅支持DDS和MRS之间迁移。
  • 表/文件迁移支持的数据源类型 表/文件迁移可以实现表或文件级别的数据迁移。 表/文件迁移时支持的数据源如表1所示。 表1 表/文件迁移支持的数据源 数据源分类 源端数据源 对应的目的端数据源 说明 数据仓库 数据仓库服务(DWS) 数据仓库:数据仓库服务(DWS), 数据湖探索 DLI ),MRS ClickHouse,Doris Hadoop:MRS HDFS,MRS HBase,MRS Hive 对象存储: 对象存储服务 (OBS) 关系型数据库:云数据库 MySQL,云数据库 PostgreSQL,云数据库 SQL Server,MySQL,PostgreSQL,Microsoft SQL Server,Oracle 搜索:Elasticsearch 公测中: 云搜索服务 CSS ), 表格存储 服务(CloudTable) 不支持DWS物理机纳管模式。 数据湖 探索(DLI) 数据仓库:数据仓库服务(DWS),数据湖探索(DLI),MRS ClickHouse,Doris Hadoop:MRS HDFS,MRS HBase,MRS Hive 对象存储:对象存储服务(OBS) 关系型数据库:云数据库 MySQL,云数据库 PostgreSQL,云数据库 SQL Server,MySQL,PostgreSQL,Microsoft SQL Server,Oracle NoSQL:MongoDB 搜索:Elasticsearch 公测中: 云搜索 服务(CSS),表格存储服务(CloudTable) MongoDB建议使用的版本:4.2。 MRS ClickHouse 数据仓库:MRS ClickHouse,数据湖探索(DLI) MRS ClickHouse建议使用的版本:21.3.4.X。 当前暂不支持对接“Kerberos加密类型”为“aes256-sha2,aes128-sha2”的MRS集群。如需对接MRS集群,请注意“Kerberos加密类型”应为“aes256-sha1,aes128-sha1”。 Doris 数据仓库:Doris 当前暂不支持对接“Kerberos加密类型”为“aes256-sha2,aes128-sha2”的MRS集群。如需对接MRS集群,请注意“Kerberos加密类型”应为“aes256-sha1,aes128-sha1”。 Hadoop MRS HDFS 数据仓库:数据仓库服务(DWS),数据湖探索(DLI) Hadoop:MRS HDFS,MRS HBase,MRS Hive 对象存储:对象存储服务(OBS) 关系型数据库:云数据库 MySQL,云数据库 PostgreSQL,云数据库 SQL Server,MySQL,PostgreSQL,Microsoft SQL Server,Oracle 搜索:Elasticsearch 公测中:云搜索服务(CSS),表格存储服务(CloudTable) 支持本地存储,仅MRS Hive、MRS Hudi支持存算分离场景。 仅MRS Hive支持Ranger场景。 不支持ZK开启SSL场景。 MRS HDFS建议使用的版本: 2.8.X 3.1.X MRS HBase建议使用的版本: 2.1.X 1.3.X MRS Hive、MRS Hudi暂不支持2.x版本,建议使用的版本: 1.2.X 3.1.X 当前暂不支持对接“Kerberos加密类型”为“aes256-sha2,aes128-sha2”的MRS集群。如需对接MRS集群,请注意“Kerberos加密类型”应为“aes256-sha1,aes128-sha1”。 MRS HBase MRS Hive 数据仓库:数据仓库服务(DWS),数据湖探索(DLI),MRS Clickhouse、Doris Hadoop:MRS HDFS,MRS HBase,MRS Hive 对象存储:对象存储服务(OBS) 关系型数据库:云数据库 MySQL,云数据库 PostgreSQL,云数据库 SQL Server,MySQL,PostgreSQL,Microsoft SQL Server,Oracle 搜索:Elasticsearch 公测中:云搜索服务(CSS),表格存储服务(CloudTable),SAP HANA MRS Hudi 数据仓库:数据仓库服务(DWS) Hadoop:MRS HBase Apache HBase 数据仓库:数据仓库服务(DWS),数据湖探索(DLI) Hadoop:MRS HDFS,MRS HBase,MRS Hive 对象存储:对象存储服务(OBS) 搜索:Elasticsearch 公测中:云搜索服务(CSS),表格存储服务(CloudTable) Apache数据源不支持作为目的端。 仅支持本地存储,不支持存算分离场景。 不支持Ranger场景。 不支持ZK开启SSL场景。 Apache HBase建议使用的版本: 2.1.X 1.3.X Apache Hive暂不支持2.x版本,建议使用的版本: 1.2.X 3.1.X Apache HDFS建议使用的版本: 2.8.X 3.1.X Apache Hive Apache HDFS 对象存储 对象存储服务(OBS) 数据仓库:数据仓库服务(DWS),数据湖探索(DLI) Hadoop:MRS HDFS,MRS HBase,MRS Hive 搜索:Elasticsearch 公测中:云搜索服务(CSS),表格存储服务(CloudTable) 对象存储服务之间的迁移,推荐使用 对象存储迁移 服务 OMS 。 不支持二进制文件导入到数据库或NoSQL。 文件系统 FTP 数据仓库:数据仓库服务(DWS),数据湖探索(DLI) Hadoop:MRS HDFS,MRS HBase,MRS Hive 搜索:Elasticsearch 对象存储:对象存储服务(OBS) 公测中:云搜索服务(CSS),表格存储服务(CloudTable) 文件系统不支持作为目的端。 FTP/SFTP到搜索的迁移仅支持如CSV等文本文件,不支持二进制文件。 FTP/SFTP到OBS的迁移仅支持二进制文件。 HTTP到OBS的迁移推荐使用obsutil工具,请参见obsutil简介。 SFTP HTTP Hadoop:MRS HDFS 关系型数据库 云数据库 MySQL 数据仓库:数据仓库服务(DWS),数据湖探索(DLI),Doris Hadoop:MRS HDFS,MRS HBase,MRS Hive,MRS Hudi 对象存储:对象存储服务(OBS) 关系型数据库:云数据库 MySQL,云数据库 PostgreSQL,云数据库 SQL Server 搜索:Elasticsearch 公测中:云搜索服务(CSS),表格存储服务(CloudTable),SAP HANA OLTP数据库之间的迁移推荐通过数据复制服务DRS进行迁移。 Microsoft SQL Server建议使用的版本:2005以上。 金仓和 GaussDB 数据源可通过PostgreSQL连接器进行连接,支持的迁移作业的源端、目的端情况与PostgreSQL数据源一致。 云数据库 SQL Server 数据仓库:数据仓库服务(DWS) Hadoop:MRS HDFS,MRS HBase,MRS Hive 对象存储:对象存储服务(OBS) 关系型数据库:云数据库 MySQL,云数据库 PostgreSQL,云数据库 SQL Server 搜索:Elasticsearch 公测中:云搜索服务(CSS),表格存储服务(CloudTable) 云数据库 PostgreSQL MySQL 数据仓库:数据仓库服务(DWS) Hadoop:MRS HDFS,MRS HBase,MRS Hive,MRS Hudi 对象存储:对象存储服务(OBS) 搜索:Elasticsearch 公测中:云搜索服务(CSS),表格存储服务(CloudTable) PostgreSQL Oracle Microsoft SQL Server 数据仓库:数据仓库服务(DWS) Hadoop:MRS HDFS,MRS HBase,MRS Hive 对象存储:对象存储服务(OBS) 搜索:Elasticsearch 公测中:云搜索服务(CSS),表格存储服务(CloudTable) NoSQL 分布式缓存服务(DCS) Hadoop:MRS HDFS,MRS HBase,MRS Hive NoSQL数据源不支持作为目的端。 Redis到DCS的迁移,可以通过其他方式进行,请参见自建Redis迁移至DCS。 Redis MongoDB 消息系统 数据接入服务 (DIS) 公测中:云搜索服务(CSS) 消息系统不支持作为目的端。 Apache Kafka DMS Kafka MRS Kafka 数据仓库:数据仓库服务(DWS),数据湖探索(DLI) Hadoop:MRS HDFS,MRS HBase,MRS Hive 对象存储:对象存储服务(OBS) 关系型数据库:云数据库 MySQL,云数据库 PostgreSQL,云数据库 SQL Server 搜索:Elasticsearch, 公测中:表格存储服务(CloudTable),云搜索服务(CSS) MRS Kafka不支持作为目的端。 仅支持本地存储,不支持存算分离场景。 不支持Ranger场景。 不支持ZK开启SSL场景。 当前暂不支持对接“Kerberos加密类型”为“aes256-sha2,aes128-sha2”的MRS集群。如需对接MRS集群,请注意“Kerberos加密类型”应为“aes256-sha1,aes128-sha1”。 搜索 Elasticsearch 数据仓库:数据仓库服务(DWS),数据湖探索(DLI) Hadoop:MRS HDFS,MRS HBase,MRS Hive 对象存储:对象存储服务(OBS) 关系型数据库:云数据库 MySQL,云数据库 PostgreSQL,云数据库 SQL Server 搜索:Elasticsearch 公测中:表格存储服务(CloudTable),云搜索服务(CSS) Elasticsearch仅支持非安全模式。 公测中 表格存储服务(CloudTable HBase) 数据仓库:数据仓库服务(DWS),数据湖探索(DLI) Hadoop:MRS HDFS,MRS HBase,MRS Hive 对象存储:对象存储服务(OBS) 关系型数据库:云数据库 MySQL,云数据库 PostgreSQL,云数据库 SQL Server,MySQL,PostgreSQL,Microsoft SQL Server,Oracle 搜索:Elasticsearch 公测中:表格存储服务(CloudTable),云搜索服务(CSS) - 云搜索服务(CSS) 数据仓库:数据仓库服务(DWS),数据湖探索(DLI) Hadoop:MRS HDFS,MRS HBase,MRS Hive 对象存储:对象存储服务(OBS) 关系型数据库:云数据库 MySQL,云数据库 PostgreSQL,云数据库 SQL Server 搜索:Elasticsearch 公测中:表格存储服务(CloudTable),云搜索服务(CSS) 导入数据到CSS推荐使用Logstash,请参见使用Logstash导入数据到Elasticsearch。 SAP HANA 数据仓库:数据仓库服务(DWS),数据湖探索(DLI) Hadoop:MRS Hive SAP HANA数据源存在如下约束: SAP HANA不支持作为目的端。 仅支持2.00.050.00.1592305219版本。 仅支持Generic Edition。 不支持BW/4 FOR HANA。 仅支持英文字母的数据库名、表名与列名,不支持存在空格、符号等特殊字符。 仅支持日期、数字、布尔、字符(除SHORTTEXT) 类型的数据类型,不支持二进制类型等其他数据类型。 迁移时不支持目的端自动建表。 FusionInsight HDFS 数据仓库:数据仓库服务(DWS),数据湖探索(DLI) Hadoop:MRS HDFS,MRS HBase,MRS Hive 对象存储:对象存储服务(OBS) 搜索:Elasticsearch 公测中:云搜索服务(CSS),表格存储服务(CloudTable) FusionInsight数据源不支持作为目的端。 仅支持本地存储,不支持存算分离场景。 不支持Ranger场景。 不支持ZK开启SSL场景。 FusionInsight HDFS建议使用的版本: 2.8.X 3.1.X FusionInsight HBase建议使用的版本: 2.1.X 1.3.X FusionInsight Hive建议使用的版本: 1.2.X 3.1.X FusionInsight HBase FusionInsight Hive 分库 分库数据仓库:数据湖探索(DLI) Hadoop:MRS HBase,MRS Hive 搜索:Elasticsearch 对象存储:对象存储服务(OBS) 公测中:云搜索服务(CSS) 分库数据源不支持作为目的端。 达梦数据库 DM 数据仓库:数据仓库服务(DWS) Hadoop:MRS Hive,MRS Hudi - 神通(ST) Hadoop:MRS Hive,MRS Hudi - 文档数据库服务(DDS) Hadoop:MRS HDFS,MRS HBase,MRS Hive - Cassandra 数据仓库:数据仓库服务(DWS),数据湖探索(DLI) Hadoop:MRS HDFS,MRS HBase,MRS Hive 对象存储:对象存储服务(OBS) 搜索:Elasticsearch 公测中:云搜索服务(CSS),表格存储服务(CloudTable) - GBASE8S Hadoop:MRS HDFS,MRS HBase 消息系统:MRS Kafka - GBASE8A Hadoop:MRS HDFS,MRS Hive,MRS HBase 消息系统:MRS Kafka - 上表中非云服务的数据源,例如MySQL,既可以支持用户本地数据中心自建的MySQL,也可以是用户在ECS上自建的MySQL,还可以是第三方云的MySQL服务。
  • 操作场景 作业参数配置完成后,将进行字段映射的配置,您可以通过字段映射界面的可自定义新增字段。 如果是文件类数据源(FTP/SFTP/HDFS/OBS)之间相互迁移数据,且源端“文件格式”配置为“二进制格式”(即不解析文件内容直接传输),则没有字段映射这一步骤。 其他场景下,CDM会自动匹配源端和目的端数据表字段,需用户检查字段映射关系和时间格式是否正确,例如:源字段类型是否可以转换为目的字段类型。 您可以单击字段映射界面的选择“添加新字段”自定义新增字段,通常用于标记数据库来源,以确保导入到目的端数据的完整性。 图1 字段映射 目前支持以下类型自定义字段: 常量 常量参数即参数值是固定的参数,不需要重新配置值。例如“lable”=“friends”用来标识常量值。 变量 您可以使用时间宏、表名宏、版本宏等变量来标记数据库来源信息。变量的语法:${variable},其中“variable”指的是变量。例如“input_time”=“${timestamp()}”用来标识当前时间的时间戳。 表达式 您可以使用表达式语言根据运行环境动态生成参数值。表达式的语法:#{expr},其中“expr”指的是表达式。例如“time”=“#{DateUtil.now()}”用来标识当前日期字符串。
  • 约束限制 如果在字段映射界面,CDM通过获取样值的方式无法获得所有列(例如从HBase/CloudTable/MongoDB导出数据时,CDM有较大概率无法获得所有列),则可以单击后选择“添加新字段”来手动增加,确保导入到目的端的数据完整。 关系数据库、Hive、MRS Hudi及DLI做源端时,不支持获取样值功能。 SQLServer作为目的端数据源时,不支持timestamp类型字段的写入,需修改为其他时间类型字段写入(如datetime)。 当作业源端为OBS、迁移CSV文件时,并且配置“解析首行为列名”参数的场景下显示列名。 当使用二进制格式进行文件到文件的迁移时,没有字段映射这一步。 自动创表场景下,需在目的端表中提前手动新增字段,再在字段映射里新增字段。 添加完字段后,新增的字段在界面不显示样值,不会影响字段值的传输,CDM会将字段值直接写入目的端。 如果字段映射关系不正确,您可以通过拖拽字段、单击对字段批量映射两种方式来调整字段映射关系。 如果是导入到数据仓库服务(DWS),则还需在目的字段中选择分布列,建议按如下顺序选取分布列: 有主键可以使用主键作为分布列。 多个数据段联合做主键的场景,建议设置所有主键作为分布列。 在没有主键的场景下,如果没有选择分布列,DWS会默认第一列作为分布列,可能会有数据倾斜风险。 如CDM不支持源端迁移字段类型,请参见不支持数据类型转换规避指导将字段类型转换为CDM支持的类型。
  • 配置MRS Hudi目的端参数 作业中目的连接为MRS Hudi连接时,目的端作业参数如表1所示。 表1 MRS Hudi作为目的端时的作业参数 通用配置 配置项 配置说明 推荐配置 目的连接名称 选择已配置的MRS Hudi连接。 hudi_to_cdm 数据库名称 输入或选择写入数据的数据库名称。单击输入框后面的按钮可进入数据库选择界面。 dbadmin 表名 单击输入框后面的按钮可进入表的选择界面。 该参数支持配置为时间宏变量,且一个路径名中可以有多个宏定义变量。使用时间宏变量和定时任务配合,可以实现定期同步新增数据,详细说明请参见使用时间宏变量完成增量同步。 说明: 如果配置了时间宏变量,通过DataArts Studio数据开发调度CDM迁移作业时,系统会将时间宏变量替换为“数据开发作业计划启动时间-偏移量”,而不是“CDM作业实际启动时间-偏移量”。 cdm 自动创表 是否自动创建Hudi表。 不自动创建:不自动建表。 不存在时创建:当目的端的数据库没有“表名”参数中指定的表时,CDM会自动创建该表。如果“表名”参数配置的表已存在,则不创建,数据写入到已存在的表中。 不自动创表 导入前清空数据 选择目的端表中数据的处理方式: 是:任务启动前会清除目标表中数据。 否:导入前不清空目标表中的数据,如果选“否”且表中有数据,则数据会追加到已有的表中。 否 全量模式写Hoodie 选择写Hoodie模式,默认选“是”表示全量模式,“否”表示微批模式。 全量模式为异步分片写入Hoodie,适用于一次全量写入场景。 微批模式为异步分批写入Hoodie,适用于对入库时间SLA要求较为严格的场景,以及对资源消耗较小,对MOR表存储类型在线进行压缩的场景。 说明: 运行-失败重试期间不允许修改此模式。 是 批次数据大小 “全量模式写Hoodie”设置为“否”时,使用微批模式呈现此参数。 用于设置单个批次写Hoodie的数据行数,默认100000行。 100000 使用入库时间字段 将一个字段标记为入库时间字段,自动建表时将此字段自动加到建表语句中,写入Hudi时将把此字段的值替换为当前时间,不自动建表时选择已经存在的入库时间字段。 是 入库时间字段名称 “使用入库时间字段”设置为“是”时,呈现此参数。 用于记录写入Hudi的时间。 说明: 对于已存在目的端表中带有入库时间字段的,可以直接使用已有的timestamp类型字段。 对于自动建表的场景,该字段会被拼接到建表语句中,类型为timestamp,该字段名称不能与源端的字段有重复(包括自定义字段)。 cdc_last_update_date Hudi建表配置 Location 存储在OBS或HDFS上数据库表的文件路径。 - Hudi表类型 Hudi表存储类型。 MOR表:数据先写入avro格式的日志文件,读取时合并到parquet文件。 COW表:数据直接写入parquet文件。 MOR Hudi表主键 对Hudi建表设置主键,多个值以逗号隔开。 - Hudi表生成器类 主键生成类型,实现org.apache.hudi.keygen.KeyGenerator从传入记录中提取键值。 - Hudi表预聚合键 对Hudi建表设置预聚合键,当两个记录拥有相同的主键时,保留precombine字段值较大的记录。 说明: 如果没有时间字段,可以设置和主键一样的字段,当遇到主键冲突时,保留最新的记录。 ts Hudi表分区字段 对Hudi建表设置分区字段,多个值以逗号隔开。 - Hudi表压缩策略(是否开启写入压缩) 在线进行压缩,仅对MOR表生效。 是 Hudi表清除策略(保留提交数) 清除时保留的提交数。 1 Hudi表归档策略(最小保留提交数) 归档时保留的最小提交数。 1 Hudi表归档策略(最大保留提交数) 归档时保留的最大提交数。 100 Hudi表配置 对Hudi建表设置自定义参数属性,此处填入的参数将会在options中生效。例如:主键、combineKey、索引。 - 父主题: 配置CDM作业目的端参数
  • 新建转换器 CDM支持字段内容转换,如果需要可单击操作列下,进入转换器列表界面,再单击“新建转换器”。 图2 新建转换器 CDM可以在迁移过程中对字段进行转换,目前支持以下字段转换器: 脱敏 隐藏字符串中的关键信息,例如要将“12345678910”转换为“123****8910”,则配置如下: “起始保留长度”为“3”。 “结尾保留长度”为“4”。 “替换字符”为“*”。 去前后空格 自动去字符串前后的空值,不需要配置参数。 字符串反转 自动反转字符串,例如将“ABC”转换为“CBA”,不需要配置参数。 字符串替换 替换字符串,需要用户配置被替换的对象,以及替换后的值。 去换行 将字段中的换行符(\n、\r、\r\n)删除。 表达式转换 数据进行转换过程中,替换内容包含特殊字符时,需要先使用\将该字符转义成普通字符。 表达式支持以下两个环境变量: value:当前字段值。 row:当前行,数组类型。 表达式支持的工具类用法罗列如下,未列出即表示不支持: 如果当前字段为字符串类型,将字符串全部转换为小写,例如将“aBC”转换为“abc”。 表达式:StringUtils.lowerCase(value) 将当前字段的字符串全部转为大写。 表达式:StringUtils.upperCase(value) 如果想将第1个日期字段格式从“2018-01-05 15:15:05”转换为“20180105”。 表达式:DateUtils.format(DateUtils.parseDate(row[0],"yyyy-MM-dd HH:mm:ss"),"yyyyMMdd") 如果想将时间戳转换成“yyyy-MM-dd hh:mm:ss”格式的日期字符串的类型,例如字段值为“1701312046588”,转换后为“2023-11-30 10:40:46”。 表达式:DateUtils.format(NumberUtils.toLong(value),"yyyy-MM-dd HH:mm:ss") 如果想将“yyyy-MM-dd hh:mm:ss”格式的日期字符串转换成时间戳的类型。 表达式:DateUtils.getTime(DateUtils.parseDate(value,"yyyy-MM-dd hh:mm:ss")) 如果当前字段值为“yyyy-MM-dd”格式的日期字符串,需要截取年,例如字段值为“2017-12-01”,转换后为“2017”。 表达式:StringUtils.substringBefore(value,"-") 如果当前字段值为数值类型,转换后值为当前值的两倍。 表达式:value*2 如果当前字段值为“true”,转换后为“Y”,其它值则转换后为“N”。 表达式:value=="true"?"Y":"N" 如果当前字段值为字符串类型,当为空时,转换为“Default”,否则不转换。 表达式:empty value? "Default":value 如果想将日期字段格式从“2018/01/05 15:15:05”转换为“2018-01-05 15:15:05”。 表达式:DateUtils.format(DateUtils.parseDate(value,"yyyy/MM/dd HH:mm:ss"),"yyyy-MM-dd HH:mm:ss") 获取一个36位的UUID(Universally Unique Identifier,通用唯一识别码)。 表达式:CommonUtils.randomUUID() 如果当前字段值为字符串类型,将首字母转换为大写,例如将“cat”转换为“Cat”。 表达式:StringUtils.capitalize(value) 如果当前字段值为字符串类型,将首字母转换为小写,例如将“Cat”转换为“cat”。 表达式:StringUtils.uncapitalize(value) 如果当前字段值为字符串类型,使用空格填充为指定长度,并且将字符串居中,当字符串长度不小于指定长度时不转换,例如将“ab”转换为长度为4的“ab”。 表达式:StringUtils.center(value,4) 删除字符串末尾的一个换行符(包括“\n”、“\r”或者“\r\n”),例如将“abc\r\n\r\n”转换为“abc\r\n”。 表达式:StringUtils.chomp(value) 如果字符串中包含指定的字符串,则返回布尔值true,否则返回false。例如“abc”中包含“a”,则返回true。 表达式:StringUtils.contains(value,"a") 如果字符串中包含指定字符串的任一字符,则返回布尔值true,否则返回false。例如“zzabyycdxx”中包含“z”或“a”任意一个,则返回true。 表达式:StringUtils.containsAny(value,"za") 如果字符串中不包含指定的所有字符,则返回布尔值true,包含任意一个字符则返回false。例如“abz”中包含“xyz”里的任意一个字符,则返回false。 表达式:StringUtils.containsNone(value,"xyz") 如果当前字符串只包含指定字符串中的字符,则返回布尔值true,包含任意一个其它字符则返回false。例如“abab”只包含“abc”中的字符,则返回true。 表达式:StringUtils.containsOnly(value,"abc") 如果字符串为空或null,则转换为指定的字符串,否则不转换。例如将空字符转换为null。 表达式:StringUtils.defaultIfEmpty(value,null) 如果字符串以指定的后缀结尾(包括大小写),则返回布尔值true,否则返回false。例如“abcdef”后缀不为null,则返回false。 表达式:StringUtils.endsWith(value,null) 如果字符串和指定的字符串完全一样(包括大小写),则返回布尔值true,否则返回false。例如比较字符串“abc”和“ABC”,则返回false。 表达式:StringUtils.equals(value,"ABC") 从字符串中获取指定字符串的第一个索引,没有则返回整数-1。例如从“aabaabaa”中获取“ab”的第一个索引1。 表达式:StringUtils.indexOf(value,"ab") 从字符串中获取指定字符串的最后一个索引,没有则返回整数-1。例如从“aFkyk”中获取“k”的最后一个索引4。 表达式:StringUtils.lastIndexOf(value,"k") 从字符串中指定的位置往后查找,获取指定字符串的第一个索引,没有则转换为“-1”。例如“aabaabaa”中索引3的后面,第一个“b”的索引是5。 表达式:StringUtils.indexOf(value,"b",3) 从字符串获取指定字符串中任一字符的第一个索引,没有则返回整数-1。例如从“zzabyycdxx”中获取“z”或“a”的第一个索引0。 表达式:StringUtils.indexOfAny(value,"za") 如果字符串仅包含Unicode字符,返回布尔值true,否则返回false。例如“ab2c”中包含非Unicode字符,返回false。 表达式:StringUtils.isAlpha(value) 如果字符串仅包含Unicode字符或数字,返回布尔值true,否则返回false。例如“ab2c”中仅包含Unicode字符和数字,返回true。 表达式:StringUtils.isAlphanumeric(value) 如果字符串仅包含Unicode字符、数字或空格,返回布尔值true,否则返回false。例如“ab2c”中仅包含Unicode字符和数字,返回true。 表达式:StringUtils.isAlphanumericSpace(value) 如果字符串仅包含Unicode字符或空格,返回布尔值true,否则返回false。例如“ab2c”中包含Unicode字符和数字,返回false。 表达式:StringUtils.isAlphaSpace(value) 如果字符串仅包含ASCII可打印字符,返回布尔值true,否则返回false。例如“!ab-c~”返回true。 表达式:StringUtils.isAsciiPrintable(value) 如果字符串为空或null,返回布尔值true,否则返回false。 表达式:StringUtils.isEmpty(value) 如果字符串中仅包含Unicode数字,返回布尔值true,否则返回false。 表达式:StringUtils.isNumeric(value) 获取字符串最左端的指定长度的字符,例如获取“abc”最左端的2位字符“ab”。 表达式:StringUtils.left(value,2) 获取字符串最右端的指定长度的字符,例如获取“abc”最右端的2位字符“bc”。 表达式:StringUtils.right(value,2) 将指定字符串拼接至当前字符串的左侧,需同时指定拼接后的字符串长度,如果当前字符串长度不小于指定长度,则不转换。例如将“yz”拼接到“bat”左侧,拼接后长度为8,则转换后为“yzyzybat”。 表达式:StringUtils.leftPad(value,8,"yz") 将指定字符串拼接至当前字符串的右侧,需同时指定拼接后的字符串长度,如果当前字符串长度不小于指定长度,则不转换。例如将“yz”拼接到“bat”右侧,拼接后长度为8,则转换后为“batyzyzy”。 表达式:StringUtils.rightPad(value,8,"yz") 如果当前字段为字符串类型,获取当前字符串的长度,如果该字符串为null,则返回0。 表达式:StringUtils.length(value) 如果当前字段为字符串类型,删除其中所有的指定字符串,例如从“queued”中删除“ue”,转换后为“qd”。 表达式:StringUtils.remove(value,"ue") 如果当前字段为字符串类型,移除当前字段末尾指定的子字符串。指定的子字符串若不在当前字段的末尾,则不转换,例如移除当前字段“www.domain.com”后的“.com”。 表达式:StringUtils.removeEnd(value,".com") 如果当前字段为字符串类型,移除当前字段开头指定的子字符串。指定的子字符串若不在当前字段的开头,则不转换,例如移除当前字段“www.domain.com”前的“www.”。 表达式:StringUtils.removeStart(value,"www.") 如果当前字段为字符串类型,替换当前字段中所有的指定字符串,例如将“aba”中的“a”用“z”替换,转换后为“zbz”。 表达式:StringUtils.replace(value,"a","z") 替换内容包含特殊字符时,需要先把该字符转义成普通字符,例如,客户想通过该表达式把字符串中 \t 去掉时,需要配置为: StringUtils.replace(value,"\\t","")(即把 \ 再次转义)。 如果当前字段为字符串类型,一次替换字符串中的多个字符,例如将字符串“hello”中的“h”用“j”替换,“o”用“y”替换,转换后为“jelly”。 表达式:StringUtils.replaceChars(value,"ho","jy") 如果字符串以指定的前缀开头(区分大小写),则返回布尔值true,否则返回false,例如当前字符串“abcdef”以“abc”开头,则返回true。 表达式:StringUtils.startsWith(value,"abc") 如果当前字段为字符串类型,去除字段中首、尾处所有指定的字符,例如去除“abcyx”中首尾所有的“x”、“y”、“z”和“b”,转换后为“abc”。 表达式:StringUtils.strip(value,"xyzb") 如果当前字段为字符串类型,去除字段末尾所有指定的字符,例如去除当前字段末尾的“abc”字符串。 表达式:StringUtils.stripEnd(value,"abc") 如果当前字段为字符串类型,去除字段开头所有指定的字符,例如去除当前字段开头的所有空格。 表达式:StringUtils.stripStart(value,null) 如果当前字段为字符串类型,获取字符串指定位置后(索引从0开始,包括指定位置的字符)的子字符串,指定位置如果为负数,则从末尾往前计算位置,末尾第一位为-1。例如获取“abcde”索引为2的字符(即c)及之后的字符串,则转换后为“cde”。 表达式:StringUtils.substring(value,2) 如果当前字段为字符串类型,获取字符串指定区间(索引从0开始,区间起点包括指定位置的字符,区间终点不包含指定位置的字符)的子字符串,区间位置如果为负数,则从末尾往前计算位置,末尾第一位为-1。例如获取“abcde”第2个字符(即c)及之后、第4个字符(即e)之前的字符串,则转换后为“cd”。 表达式:StringUtils.substring(value,2,4) 如果当前字段为字符串类型,获取当前字段里第一个指定字符后的子字符串。例如获取“abcba”中第一个“b”之后的子字符串,转换后为“cba”。 表达式:StringUtils.substringAfter(value,"b") 如果当前字段为字符串类型,获取当前字段里最后一个指定字符后的子字符串。例如获取“abcba”中最后一个“b”之后的子字符串,转换后为“a”。 表达式:StringUtils.substringAfterLast(value,"b") 如果当前字段为字符串类型,获取当前字段里第一个指定字符前的子字符串。例如获取“abcba”中第一个“b”之前的子字符串,转换后为“a”。 表达式:StringUtils.substringBefore(value,"b") 如果当前字段为字符串类型,获取当前字段里最后一个指定字符前的子字符串。例如获取“abcba”中最后一个“b”之前的子字符串,转换后为“abc”。 表达式:StringUtils.substringBeforeLast(value,"b") 如果当前字段为字符串类型,获取嵌套在指定字符串之间的子字符串,没有匹配的则返回null。例如获取“tagabctag”中“tag”之间的子字符串,转换后为“abc”。 表达式:StringUtils.substringBetween(value,"tag") 如果当前字段为字符串类型,删除当前字符串两端的控制字符(char≤32),例如删除字符串前后的空格。 表达式:StringUtils.trim(value) 将当前字符串转换为字节,如果转换失败,则返回0。 表达式:NumberUtils.toByte(value) 将当前字符串转换为字节,如果转换失败,则返回指定值,例如指定值配置为1。 表达式:NumberUtils.toByte(value,1) 将当前字符串转换为Double数值,如果转换失败,则返回0.0d。 表达式:NumberUtils.toDouble(value) 将当前字符串转换为Double数值,如果转换失败,则返回指定值,例如指定值配置为1.1d。 表达式:NumberUtils.toDouble(value,1.1d) 将当前字符串转换为Float数值,如果转换失败,则返回0.0f。 表达式:NumberUtils.toFloat(value) 将当前字符串转换为Float数值,如果转换失败,则返回指定值,例如配置指定值为1.1f。 表达式:NumberUtils.toFloat(value,1.1f) 将当前字符串转换为Int数值,如果转换失败,则返回0。 表达式:NumberUtils.toInt(value) 将当前字符串转换为Int数值,如果转换失败,则返回指定值,例如配置指定值为1。 表达式:NumberUtils.toInt(value,1) 将字符串转换为Long数值,如果转换失败,则返回0。 表达式:NumberUtils.toLong(value) 将当前字符串转换为Long数值,如果转换失败,则返回指定值,例如配置指定值为1L。 表达式:NumberUtils.toLong(value,1L) 将字符串转换为Short数值,如果转换失败,则返回0。 表达式:NumberUtils.toShort(value) 将当前字符串转换为Short数值,如果转换失败,则返回指定值,例如配置指定值为1。 表达式:NumberUtils.toShort(value,1) 将当前IP字符串转换为Long数值,例如将“10.78.124.0”转换为Long数值是“172915712”。 表达式:CommonUtils.ipToLong(value) 从网络读取一个IP与物理地址映射文件,并存放到Map集合,这里的URL是IP与地址映射文件存放地址,例如“http://10.114.205.45:21203/sqoop/IpList.csv”。 表达式:HttpsUtils.downloadMap("url") 将IP与地址映射对象缓存起来并指定一个key值用于检索,例如“ipList”。 表达式:CommonUtils.setCache("ipList",HttpsUtils.downloadMap("url")) 取出缓存的IP与地址映射对象。 表达式:CommonUtils.getCache("ipList") 判断是否有IP与地址映射缓存。 表达式:CommonUtils.cacheExists("ipList") 根据IP取出对应的详细地址:国家_省份_城市_运营商,例如“1xx.78.124.0”对应的地址为“中国_广东_深圳_电信”,取不到对应地址则默认“**_**_**_**”。如果需要,可通过StringUtil类表达式对地址进行进一步拆分。 表达式:CommonUtils.getMapValue(CommonUtils.ipToLong(value),CommonUtils.cacheExists("ipLis")?CommonUtils.getCache("ipLis"):CommonUtils.setCache("ipLis",HttpsUtils.downloadMap("url"))) 根据指定的偏移类型(month/day/hour/minute/second)及偏移量(正数表示增加,负数表示减少),将指定格式的时间转换为一个新时间,例如将“2019-05-21 12:00:00”增加8个小时。 表达式:DateUtils.getCurrentTimeByZone("yyyy-MM-dd HH:mm:ss",value, "hour", 8) 如果value值为空或者null时,则返回字符串“aaa”,否则返回value。 表达式:StringUtils.defaultIfEmpty(value,"aaa")
  • 约束限制 作业源端开启“使用SQL语句”参数时不支持配置转换器。 如果在字段映射界面,CDM通过获取样值的方式无法获得所有列(例如从HBase/CloudTable/MongoDB导出数据时,CDM有较大概率无法获得所有列),则可以单击后选择“添加新字段”来手动增加,确保导入到目的端的数据完整。 关系数据库、Hive、MRS Hudi及DLI做源端时,不支持获取样值功能。 SQLServer作为目的端数据源时,不支持timestamp类型字段的写入,需修改为其他时间类型字段写入(如datetime)。 当作业源端为OBS、迁移CSV文件时,并且配置“解析首行为列名”参数的场景下显示列名。 当使用二进制格式进行文件到文件的迁移时,没有字段映射这一步。 自动创表场景下,需在目的端表中提前手动新增字段,再在字段映射里新增字段。 添加完字段后,新增的字段在界面不显示样值,不会影响字段值的传输,CDM会将字段值直接写入目的端。 如果字段映射关系不正确,您可以通过拖拽字段、单击对字段批量映射两种方式来调整字段映射关系。 如果是导入到数据仓库服务(DWS),则还需在目的字段中选择分布列,建议按如下顺序选取分布列: 有主键可以使用主键作为分布列。 多个数据段联合做主键的场景,建议设置所有主键作为分布列。 在没有主键的场景下,如果没有选择分布列,DWS会默认第一列作为分布列,可能会有数据倾斜风险。 如CDM不支持源端迁移字段类型,请参见不支持数据类型转换规避指导将字段类型转换为CDM支持的类型。
  • 新增字段 您可以单击字段映射界面的选择“添加新字段”自定义新增字段,通常用于标记数据库来源,以确保导入到目的端数据的完整性。 图1 字段映射 目前支持以下类型自定义字段: 常量 常量参数即参数值是固定的参数,不需要重新配置值。例如“lable”=“friends”用来标识常量值。 变量 您可以使用时间宏、表名宏、版本宏等变量来标记数据库来源信息。变量的语法:${variable},其中“variable”指的是变量。例如“input_time”=“${timestamp()}”用来标识当前时间的时间戳。 表达式 您可以使用表达式语言根据运行环境动态生成参数值。表达式的语法:#{expr},其中“expr”指的是表达式。例如“time”=“#{DateUtil.now()}”用来标识当前日期字符串。
  • 操作场景 作业参数配置完成后,将进行字段映射的配置,您可以通过字段映射界面的可自定义新增字段,也可单击操作列下创建字段转换器。 如果是文件类数据源(FTP/SFTP/HDFS/OBS)之间相互迁移数据,且源端“文件格式”配置为“二进制格式”(即不解析文件内容直接传输),则没有字段映射这一步骤。 其他场景下,CDM会自动匹配源端和目的端数据表字段,需用户检查字段映射关系和时间格式是否正确,例如:源字段类型是否可以转换为目的字段类型。 自动创表场景下,需在目的端表中提前手动新增字段,再在字段映射里新增字段。
  • 创建表/文件迁移作业 在创建表/文件迁移作业时,选择已创建的源端连接器、目的端连接器。 图1 配置作业 单击“下一步”,进入“字段映射”配置页面后,单击源字段图标。 图2 配置字段映射 选择“自定义字段”页签,填写字段名称及字段值后单击“确认”按钮,例如: 名称:InputTime。 值:${timestamp()},更多时间宏变量请参见表1。 图3 添加字段 表1 时间变量宏定义具体展示 宏变量 含义 实际显示效果 ${dateformat(yyyy-MM-dd)} 以yyyy-MM-dd格式返回当前时间。 2017-10-16 ${dateformat(yyyy/MM/dd)} 以yyyy/MM/dd格式返回当前时间。 2017/10/16 ${dateformat(yyyy_MM_dd HH:mm:ss)} 以yyyy_MM_dd HH:mm:ss格式返回当前时间。 2017_10_16 09:00:00 ${dateformat(yyyy-MM-dd HH:mm:ss, -1, DAY)} 以yyyy-MM-dd HH:mm:ss格式返回时间,时间为当前时间的前一天。 2017-10-15 09:00:00 ${dateformat(yyyy-MM-dd, -1, DAY)} 00:00:00 以yyyy-MM-dd HH:mm:ss格式返回时间,时间为当前时间的前一天0点。 2017-10-15 00:00:00 ${dateformat(yyyy-MM-dd, -1, DAY)} 12:00:00 以yyyy-MM-dd HH:mm:ss格式返回时间,时间为当前时间的前一天12点。 2017-10-15 12:00:00 ${dateformat(yyyy-MM-dd, -N, DAY)} 00:00:00 以yyyy-MM-dd HH:mm:ss格式返回时间,时间为当前时间的前N天的0点。 N为3时: 2017-10-13 00:00:00 ${dateformat(yyyy-MM-dd, -N, DAY)} 12:00:00 以yyyy-MM-dd HH:mm:ss格式返回时间,时间为当前时间的前N天的12点。 N为3时: 2017-10-13 12:00:00 ${timestamp()} 返回当前时间的时间戳,即1970年1月1日(00:00:00 GMT)到当前时间的毫秒数。 1508115600000 ${timestamp(-10, MINUTE)} 返回当前时间点10分钟前的时间戳。 1508115000000 ${timestamp(dateformat(yyyyMMdd))} 返回今天0点的时间戳。 1508083200000 ${timestamp(dateformat(yyyyMMdd,-1,DAY))} 返回昨天0点的时间戳。 1507996800000 ${timestamp(dateformat(yyyyMMddHH))} 返回当前整小时的时间戳。 1508115600000 添加完字段后,新增的字段在界面不显示样值,不会影响字段值的传输,CDM会将字段值直接写入目的端。 这里“添加字段”中“自定义字段”的功能,要求源端连接器为JDBC连接器、HBase连接器、MongoDB连接器、ElasticSearch连接器、Kafka连接器,或者目的端为HBase连接器。 添加完字段后,请确保自定义入库时间字段与目的端表字段类型相匹配。 单击“下一步”配置任务参数,一般情况下全部保持默认即可。 单击“保存并运行”,回到作业管理的表/文件迁移界面,在作业管理界面可查看作业执行进度和结果。 作业执行成功后,单击作业操作列的“历史记录”,可查看该作业的历史执行记录、读取和写入的统计数据。 在历史记录界面单击“日志”,可查看作业的日志信息。 前往目的端数据源查看数据迁移的入库时间。
  • 作业参数的环境变量 CDM在创建迁移作业时,可以手动输入的参数(例如OBS桶名、文件路径等)、参数中的某个字段、或者字段中的某个字符,都支持配置为一个全局变量,方便您批量更改作业中的参数值,以及作业导出/导入后进行批量替换。 这里以批量替换作业中OBS桶名为例进行介绍。 在CDM作业管理界面,单击“配置管理”页签,配置环境变量。 bucket_1=A bucket_2=B 这里以变量“bucket_1”表示桶A,变量“bucket_2”表示桶B。 在创建CDM迁移作业的界面,迁移桶A的数据到桶B。 源端桶名配置为${bucket_1},目的端桶名配置为${bucket_2}。 图1 桶名配置为环境变量 如果下次要迁移桶C数据到桶D,则无需更改作业参数,只需要在“配置管理”界面将环境变量改为如下即可: bucket_1=C bucket_2=D
  • 定时备份/恢复 该功能依赖于OBS服务。当前定时备份内容不会自动老化删除,您需要定期手动清理备份文件。 前提条件 已创建OBS连接,详情请参见OBS连接参数说明。 定时备份 在CDM作业管理界面,单击“配置管理”页签,配置定时备份的参数。 表2 定时备份参数 参数 说明 配置样例 定时备份 自动备份功能的开关,该功能只备份作业,不会备份连接。 开 备份策略 所有作业:不管作业处于什么状态,CDM会备份所有表/文件迁移作业、整库迁移的作业。不备份历史作业。 分组作业:选择备份某一个或多个分组下的作业。 所有作业 备份周期 选择备份周期: 日:每天零点执行一次。 周:每周一零点执行一次。 月:每月1号零点执行一次。 日 备份写入OBS连接 CDM通过该连接,将作业备份到OBS,需要用户提前在“连接管理”界面创建好OBS连接。 obslink OBS桶 存储备份文件的OBS桶。 cdm 备份数据目录 存储备份文件的目录。 /cdm-bk/ 恢复作业 如果之前执行过自动备份,“配置管理”页签下会显示备份列表:显示备份文件所在的OBS桶、路径、备份时间。 您可以单击备份列表操作列的“恢复备份”来恢复CDM作业。
  • 最大抽取并发数 最大抽取并发数即集群最大抽取并发数。 此处的“最大抽取并发数”参数与集群配置处的“最大抽取并发数”参数同步,在任意一处修改即可生效。 CDM通过数据迁移作业,将源端数据迁移到目的端数据源中。其中,主要运行逻辑如下: 数据迁移作业提交运行后,CDM会根据作业配置中的“抽取并发数”参数,将每个作业拆分为多个Task,即作业分片。 不同源端数据源的作业分片维度有所不同,因此某些作业可能出现未严格按作业“抽取并发数”参数分片的情况。 CDM依次将Task提交给运行池运行。根据集群配置管理中的“最大抽取并发数”参数,超出规格的Task排队等待运行。 因此作业抽取并发数和集群最大抽取并发数参数设置为适当的值可以有效提升迁移速度,您可参考下文有效配置抽取并发数。 集群最大抽取并发数的上限建议为vCPU核数*2,如表1所示。 表1 集群最大抽取并发数配置建议 规格名称 vCPUs/内存 集群并发数上限参考 cdm.large 8核 16GB 16 cdm.xlarge 16核 32GB 32 cdm.4xlarge 64核 128GB 128 作业抽取并发数的配置原则如下: 迁移的目的端为文件时,CDM不支持多并发,此时应配置为单进程抽取数据。 表中每行数据大小为1MB以下的可以设置多并发抽取,超过1MB的建议单线程抽取数据。 作业抽取并发数可参考集群最大抽取并发数配置,但不建议超过集群最大抽取并发数上限。 源端为Hive数据源且使用JDBC方式读取数据时,CDM不支持多并发,此时应配置为单进程抽取数据。 目的端为DLI数据源时,抽取并发数建议配置为1,否则可能会导致写入失败。
  • DDS连接参数说明 DDS连接适用于华为云上的文档数据库服务,常用于从DDS同步数据到大数据平台。 连接云服务DDS时,相关参数如表1所示。 作业运行中禁止修改密码或者更换用户。在作业运行过程中修改密码或者更换用户,密码不会立即生效且作业会运行失败。 表1 DDS连接参数 参数名 说明 取值样例 名称 连接的名称,根据连接的数据源类型,用户可自定义便于记忆、区分的连接名。 dds_link 服务器列表 服务器地址列表,输入格式为“数据库服务器 域名 或IP地址:端口”。多个服务器列表间以“;”分隔。 192.168.0.1:7300;192.168.0.2:7301 数据库名称 要连接的DDS数据库名称。 DB_dds 用户名 连接DDS的用户名。 cdm 密码 连接DDS的密码。 - 直连模式 适用于主节点网络通,副本节点网络不通场景。 说明: 直连模式服务器列表只能配一个ip。 直连适用于主节点网络通,副本节点网络不通场景。 否 父主题: 配置连接参数
  • DMS Kafka连接参数说明 连接DMS的Kafka队列时,相关参数如表1所示。 作业运行中禁止修改密码或者更换用户。在作业运行过程中修改密码或者更换用户,密码不会立即生效且作业会运行失败。 表1 DMS Kafka连接参数 参数名 说明 取值样例 名称 连接的名称,根据连接的数据源类型,用户可自定义便于记忆、区分的连接名。 dms_link 服务类型 选择DMS Kafka版本,目前只有专享版。 专享版 Kafka Broker Kafka专享版实例的地址,格式为 host:port。 - Kafka SASL_SSL 选择是否打开客户端连接Kafka专享版实例时SSL认证的开关。当DMS Kafka实例的连接信息中启用的安全协议为“SASL_SSL”时需要开启。 开启Kafka SASL_SSL,则 数据加密 传输,安全性更高,但性能会下降。 说明: 启用SSL认证后,Kafka会将Kafka Broker连接地址视做域名不断进行解析,导致性能消耗。建议修改CDM集群对应的ECS主机(通过集群IP查找对应的ECS主机)中的“/etc/hosts”文件,为其添加Broker连接地址的自映射,以便客户端能够快速解析实例的Broker。例如Kafka Broker地址配置为10.154.48.120时,hosts文件中的自映射配置为: 10.154.48.120 10.154.48.120 是 用户名 开启Kafka SASL_SSL时显示该参数,表示连接DMS Kafka的用户名。 - 密码 开启Kafka SASL_SSL时显示该参数,表示连接DMS Kafka的密码。 - 属性配置 当DMS Kafka实例的连接信息中启用的安全协议后,需要添加数据加密方式属性:属性名称填写为security.protocol,值根据Kafka实例中的安全协议填写为SASL_SSL或SASL_PLAINTEXT。 当DMS Kafka实例的连接信息中配置SASL认证机制后,需要添加认证方式的属性:属性名称填写为sasl.mechanism,值根据Kafka实例中配置的SASL认证机制填写为PLAIN或SC RAM -SHA-512(同时支持时选择其中任意一种填写即可)。 - 父主题: 配置连接参数
  • 创建CDM集群 如果是独立CDM服务,参考创建集群创建CDM集群;如果是作为DataArts Studio服务CDM组件使用,参考创建集群创建CDM集群。 关键配置如下: CDM集群的规格,按待迁移的数据量选择,一般选择cdm.medium即可,满足大部分迁移场景。 CDM集群的VPC必须和云搜索服务集群所在VPC一致,且推荐子网、安全组也与云搜索服务一致。 如果安全控制原因不能使用相同子网和安全组,那么需要确保安全组规则能允许CDM访问云搜索服务集群。
  • 操作步骤 登录管理控制台,在服务列表中选择“ 云审计 服务 CTS ”,进入云审计服务控制台。 在云审计服务控制台,默认展示事件列表,您可以通过筛选来查询对应的操作事件。 其中,CDM的操作事件您可以在“事件来源”中筛选“CDM”进行查看。 图1 CDM操作事件 在需要查看的事件左侧,单击事件名称左侧箭头,展开该记录的详细信息。 在需要查看的记录右侧,单击“查看事件”,弹窗中显示了该操作事件结构的详细信息。 更多关于云审计的信息,请参见云审计服务用户指南。
  • 支持云审计的关键操作 云审计服务(Cloud Trace Service,简称CTS)为用户提供了云账户下资源的操作记录,可以帮您记录相关的操作事件,便于日后的查询、审计和回溯。 表1 支持云审计的关键操作列表 操作名称 资源类型 事件名称 创建集群 cluster createCluster 删除集群 cluster deleteCluster 修改集群配置 cluster modifyCluster 开机 cluster startCluster 重启 cluster restartCluster 导入作业 cluster clusterImportJob 绑定弹性IP cluster bindEip 解绑弹性IP cluster unbindEip 创建连接 link createLink 修改连接 link modifyLink 测试连接 link verifyLink 删除连接 link deleteLink 创建任务 job createJob 修改任务 job modifyJob 删除任务 job deleteJob 启动任务 job startJob 停止任务 job stopJob 父主题: 查看审计日志
  • 配置HTTP源端参数 作业中源连接为HTTP连接时,源端作业参数如表1所示。当前只支持从HTTP URL导出数据,不支持导入。 表1 HTTP/HTTPS作为源端时的作业参数 参数名 说明 取值样例 文件URL 通过使用GET方法,从HTTP/HTTPS协议的URL中获取数据。 用于读取一个公网HTTP/HTTPS URL的文件,包括第三方对象存储的公共读取场景和网盘场景。 https://bucket.obs.myhuaweicloud.com/object-key 列表文件 选择“是”,将待上传的文本文件中所有URL对应的文件拉取到OBS,文本文件记录的是HDFS上的文件路径。 是 列表文件源连接 文本文件存储在OBS桶中,这里需要选择已建立的OBS连接。 obs_link 列表文件OBS桶 存储文本文件的OBS桶名称。 obs-cdm 列表文件或目录 在OBS中存储文本文件的文件自定义目录,多级目录可用“/”进行分隔。 test1 文件格式 传输数据时使用的格式。其中CSV和JSON仅支持迁移到数据表场景,二进制格式适用于文件迁移场景。 二进制格式 压缩格式 选择对应压缩格式的源文件进行迁移: 无:表示传输所有格式的文件。 GZIP:表示只传输GZIP格式的文件。 ZIP:表示只传输ZIP格式的文件。 TAR.GZ:表示只传输TAR.GZ格式的文件。 无 压缩文件后缀 压缩格式非无时,显示该参数。 该参数需要解压缩的文件后缀名。当一批文件中以该值为后缀时,才会执行解压缩操作,否则保持原样传输。当输入*或为空时,所有文件都会被解压。 * 文件分隔符 传输多个文件时,CDM使用这里配置的文件分隔符来区分各个文件,默认为|。列表文件选择“是”时,不显示该参数。 | QUERY参数 该参数设置为“是”时,上传到OBS的对象使用的对象名,为去掉query参数后的字符。 该参数设置为“否”时,上传到OBS的对象使用的对象名,包含query参数。 否 忽略不存在原路径/文件 如果将其设为是,那么作业在源路径不存在的情况下也能成功执行。 否 MD5文件名后缀 校验CDM抽取的文件,是否与源文件一致,详细请参见MD5校验文件一致性。 .md5 QUERY参数 此字段为true时,则上传对象时使用的对象名为去掉query参数的字符。 否 父主题: 配置CDM作业源端参数
  • HBase/CloudTable增量迁移 使用CDM导出HBase(包括MRS HBase、FusionInsight HBase、Apache HBase)或者表格存储服务(CloudTable)的数据时,支持导出指定时间段内的数据,配合CDM的定时任务,可以实现HBase/CloudTable的增量迁移。 如果配置了时间宏变量,通过DataArts Studio数据开发调度CDM迁移作业时,系统会将时间宏变量替换为“数据开发作业计划启动时间-偏移量”,而不是“CDM作业实际启动时间-偏移量”。 在创建CDM表/文件迁移的作业,源连接选择为HBase连接或CloudTable连接时,高级属性的可选参数中可以配置时间区间。 图1 HBase时间区间 起始时间(包含该值),格式为“yyyy-MM-dd HH:mm:ss”,表示只抽取该时间及以后的数据。 终止时间(不包含该值),格式为“yyyy-MM-dd HH:mm:ss”,表示只抽取该时间以前的数据。 这2个参数支持配置为时间宏变量,例如: 起始时间配置为${dateformat(yyyy-MM-dd HH:mm:ss, -1, DAY)}时,表示只导出昨天以后的数据。 终止时间配置为${dateformat(yyyy-MM-dd HH:mm:ss)}时,表示只导出当前时间以前的数据。 这2个参数同时配置后,CDM就只导出前一天内的数据,再将该作业配置为每天0点执行一次,就可以增量同步每天新生成的数据。 父主题: 增量迁移原理介绍
  • 在MRS Hive上创建Hive分区表 在MRS的Hive上使用下面SQL语句创建一张Hive分区表,表名与MySQL上的表trip_data一致,且Hive表比MySQL表多建三个字段y、ym、ymd,作为Hive的分区字段。SQL语句如下: 1 create table trip_data(TripID int,Duration int,StartDate timestamp,StartStation varchar(64),StartTerminal int,EndDate timestamp,EndStation varchar(64),EndTerminal int,Bike int,SubscriberType varchar(32),ZipCodev varchar(10))partitioned by (y int,ym int,ymd int); Hive表trip_data有三个分区字段:骑行起始时间的年、骑行起始时间的年月、骑行起始时间的年月日,例如一条骑行记录的起始时间为2018/5/11 9:40,那么这条记录会保存在分区trip_data/2018/201805/20180511下面。对trip_data按时间维度统计汇总时,只需要对局部数据扫描,从而提升性能。
  • 创建CDM集群并绑定EIP 如果是独立CDM服务,参考创建集群创建CDM集群;如果是作为DataArts Studio服务CDM组件使用,参考创建集群创建CDM集群。 关键配置如下: CDM集群的规格,按待迁移的数据量选择,一般选择cdm.medium即可,满足大部分迁移场景。 CDM集群所在VPC、子网、安全组,选择与MRS集群所在的网络一致。 CDM集群创建完成后,选择集群操作列的“绑定弹性IP”,CDM通过EIP访问MySQL。 图2 集群列表 如果用户对本地数据源的访问通道做了SSL加密,则CDM无法通过弹性IP连接数据源。
  • 操作场景 假设MySQL上有一张表trip_data,保存了自行车骑行记录,里面有起始时间、结束时间,起始站点、结束站点、骑手ID等信息,trip_data表字段定义如图1所示。 图1 MySQL表字段 使用CDM将MySQL中的表trip_data导入到MRS Hive分区表,流程如下: 在MRS Hive上创建Hive分区表 创建CDM集群并绑定EIP 创建MySQL连接 创建Hive连接 创建迁移作业
  • 配置DDS目的端参数 作业中目的连接为DDS连接时,即导入数据到文档数据库服务(DDS)时,目的端作业参数如表1所示。 表1 DDS作为目的端时的作业参数 参数名 说明 取值样例 数据库名称 选择待导入数据的数据库。 ddsdb 集合名称 选择待导入数据的集合,相当于关系数据库的表名。单击输入框后面的按钮可进入表的选择界面,用户也可以直接输入表名称。 如果选择界面没有待选择的表,请确认表是否已经创建,或者对应连接里的账号是否有元数据查询的权限。 COLLECTION 父主题: 配置CDM作业目的端参数
  • 功能说明 云监控服务 (Cloud Eye)可以监控和查看云服务的运行状态、各个指标的使用情况,并对监控项创建告警规则。 当您创建了CDM集群后, 云监控 服务会自动关联CDM的监控指标,帮助您实时掌握CDM集群的各项性能指标,精确掌握CDM集群的运行情况。 本章节描述了CDM上报云监控的监控指标的命名空间、监控指标列表和维度定义。 如果您需要查看CDM相关的监控指标,请参见查看CDM监控指标。 如果您需要在监控数据满足指定条件时发送报警通知,可参见设置CDM告警规则。
  • MRS HBase 连接MRS上的HBase数据源时,相关参数如表1所示。 当前暂不支持对接“Kerberos加密类型”为“aes256-sha2,aes128-sha2”的MRS集群。如需对接MRS集群,请注意“Kerberos加密类型”应为“aes256-sha1,aes128-sha1”。 新建MRS连接前,需在MRS中添加一个kerberos认证用户并登录MRS管理页面更新其初始密码,然后使用该新建用户创建MRS连接。 如需连接MRS 2.x版本的集群,请先创建2.x版本的CDM集群。CDM 1.8.x版本的集群无法连接MRS 2.x版本的集群。 如果选择集群后连接失败,请检查MRS集群与作为Agent的CDM实例是否网络互通。网络互通需满足如下条件: DataArts Studio实例(指DataArts Studio实例中的CDM集群)与MRS集群处于不同区域的情况下,需要通过公网或者专线打通网络。通过公网互通时,需确保CDM集群已绑定EIP,MRS集群可以访问公网且防火墙规则已开放连接端口。 DataArts Studio实例(指DataArts Studio实例中的CDM集群)与MRS集群同区域情况下,同虚拟私有云、同子网、同安全组的不同实例默认网络互通;如果同虚拟私有云但子网或安全组不同,还需配置路由规则及安全组规则,配置路由规则请参见如何配置路由规则章节,配置安全组规则请参见如何配置安全组规则章节。 此外,还需确保该MRS集群与DataArts Studio工作空间所属的企业项目相同,如果不同,您需要修改工作空间的企业项目。 当同一Agent连接多个MRS集群时,如果其中一个MRS集群被删除或状态异常,会影响另外一个正常的MRS集群数据连接。因此建议一个Agent对应一个MRS集群数据连接。 表1 MRS上的HBase连接参数 参数名 说明 取值样例 名称 连接的名称,根据连接的数据源类型,用户可自定义便于记忆、区分的连接名。 mrs_hbase_link Manager IP MRS Manager的浮动IP地址,可以单击输入框后的“选择”来选定已创建的MRS集群,CDM会自动填充下面的鉴权参数。 说明: 当前DataArts Studio不支持对接“Kerberos加密类型”为“aes256-sha2,aes128-sha2”的MRS集群。如需对接MRS集群,请注意“Kerberos加密类型”应为“aes256-sha1,aes128-sha1”。 127.0.0.1 用户名 选择KERBEROS鉴权时,需要配置MRS Manager的用户名和密码。从HDFS导出目录时,如果需要创建快照,这里配置的用户需要HDFS系统的管理员权限。 如果要创建MRS安全集群的数据连接,不能使用admin用户。因为admin用户是默认的管理页面用户,这个用户无法作为安全集群的认证用户来使用。您可以创建一个新的MRS用户,然后在创建MRS数据连接时,“用户名”和“密码”填写为新建的MRS用户及其密码。 说明: 如果CDM集群为2.9.0版本及之后版本,且MRS集群为3.1.0及之后版本,则所创建的用户至少需具备Manager_viewer的角色权限才能在CDM创建连接;如果需要对MRS组件的库、表、列进行操作,还需要参考MRS文档添加对应组件的库、表、列操作权限。 如果CDM集群为2.9.0之前的版本,或MRS集群为3.1.0之前的版本,则所创建的用户需要具备Manager_administrator或System_administrator权限,才能在CDM创建连接。 仅具备Manager_tenant或Manager_auditor权限,无法创建连接。 cdm 密码 访问MRS Manager的用户密码。 - 认证类型 访问集群的认证类型: SIMPLE:非安全模式选择Simple鉴权。 KERBEROS:安全模式选择Kerberos鉴权。 SIMPLE HBase版本 HBase版本。 HBASE_2_X 运行模式 “HBASE_2_X”版本支持该参数。选择HBase连接的运行模式: EMBEDDED:连接实例与CDM运行在一起,该模式性能较好。 STANDALONE:连接实例运行在独立进程。如果CDM需要对接多个Hadoop数据源(MRS、Hadoop或CloudTable),并且既有KERBEROS认证模式又有SIMPLE认证模式,只能使用STANDALONE模式。 说明:STANDALONE模式主要是用来解决版本冲突问题的运行模式。当同一种数据连接的源端或者目的端连接器的版本不一致时,存在jar包冲突的情况,这时需要将源端或目的端放在STANDALONE进程里,防止冲突导致迁移失败。 STANDALONE 是否使用集群配置 用户可以在“连接管理”处创建集群配置,用于简化Hadoop连接参数配置。 否 集群配置名 仅当“是否使用集群配置”为“是”时,此参数有效。此参数用于选择用户已经创建好的集群配置。 集群配置的创建方法请参见管理集群配置。 hbase_01 单击“显示高级属性”,然后单击“添加”,您可以添加客户端的配置属性。所添加的每个属性需配置属性名称和值。对于不再需要的属性,可单击属性后的“删除”按钮进行删除。
  • FusionInsight HBase 连接FusionInsight HD上的HBase数据源时,相关参数如表2所示。 表2 FusionInsight HBase连接参数 参数名 说明 取值样例 名称 连接的名称,根据连接的数据源类型,用户可自定义便于记忆、区分的连接名。 FI_hbase_link Manager IP FusionInsight Manager平台的地址。 127.0.0.1 Manager端口 FusionInsight Manager平台的端口。 28443 CAS Server端口 与FusionInsight对接的CAS Server的端口。 20009 用户名 登录FusionInsight Manager平台的用户名。 cdm 密码 FusionInsight Manager平台的密码。 - 认证类型 访问集群的认证类型: SIMPLE:非安全模式选择Simple鉴权。 KERBEROS:安全模式选择Kerberos鉴权。 KERBEROS HBase版本 HBase版本。 HBASE_2_X 运行模式 “HBASE_2_X”版本支持该参数。选择HBase连接的运行模式: EMBEDDED:连接实例与CDM运行在一起,该模式性能较好。 STANDALONE:连接实例运行在独立进程。如果CDM需要对接多个Hadoop数据源(MRS、Hadoop或CloudTable),并且既有KERBEROS认证模式又有SIMPLE认证模式,只能使用STANDALONE模式。 说明: STANDALONE模式主要是用来解决版本冲突问题的运行模式。当同一种数据连接的源端或者目的端连接器的版本不一致时,存在jar包冲突的情况,这时需要将源端或目的端放在STANDALONE进程里,防止冲突导致迁移失败。 STANDALONE 是否使用集群配置 您可以通过使用集群配置,简化Hadoop连接参数配置。 否 集群配置名 仅当“是否使用集群配置”为“是”时,此参数有效。此参数用于选择用户已经创建好的集群配置。 集群配置的创建方法请参见管理集群配置。 hbase_01 单击“显示高级属性”,然后单击“添加”,您可以添加客户端的配置属性。所添加的每个属性需配置属性名称和值。对于不再需要的属性,可单击属性后的“删除”按钮进行删除。
  • 指定文件名迁移 从FTP/SFTP/OBS导出文件时,CDM支持指定文件名迁移,用户可以单次迁移多个指定的文件(最多50个),导出的多个文件只能写到目的端的同一个目录。 在创建表/文件迁移作业时,如果源端数据源为FTP/SFTP/OBS,CDM源端的作业参数“源目录或文件”支持输入多个文件名(最多50个),文件名之间默认使用“|”分隔,您也可以自定义文件分隔符,从而实现文件列表迁移。 迁移文件或对象时支持文件级增量迁移(通过配置跳过重复文件实现),但不支持断点续传。 例如要迁移3个文件,第2个文件迁移到一半时由于网络原因失败,再次启动迁移任务时,会跳过第1个文件,从第2个文件开始重新传,但不能从第2个文件失败的位置重新传。 文件迁移时,单个任务支持千万数量的文件,如果待迁移目录下文件过多,建议拆分到不同目录并创建多个任务。 父主题: 关键操作指导
共100000条