
# 通过CDM节点批量创建分表迁移作业
#### 适用场景
业务系统中，数据源往往会采用分表的形式，以减少单表大小，支持复杂的业务应用场景。
在这种情况下，通过CDM进行数据集成时，需要针对每张表创建一个数据迁移作业。您可以参考本教程，通过数据开发模块的For Each节点和CDM节点，配合作业参数，实现批量创建分表迁移作业。
本教程中，源端MySQL数据库中存在三张分表，分别是mail01、mail02和mail03，且表结构一致，数据内容不同。目的端为MRS Hive服务。
#### 操作前提
- 已创建CDM集群。
- 已经开通了MRS Hive服务。
- 已经在MRS Hive服务中创建了数据库和表。
 
#### 创建连接
1. 登录DataArts Studio控制台，找到所需要的DataArts Studio实例，单击实例卡片上的"进入控制台"，进入概览页面。
2. 找到所需要的工作空间，单击工作空间的"数据集成"，系统跳转至数据集成页面。
3. 单击CDM集群"操作"列的"作业管理"，进入作业管理界面。
4. 单击"连接管理-\>驱动管理"，参考[管理驱动](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0132.html)，上传MySQL数据库驱动。
5. 选择"连接管理 \> 新建连接"，新建MySQL连接。连接器类型选择"MySQL"，然后单击"下一步"配置连接参数，参数说明如[表1]所示。配置完成后，单击"保存"回到连接管理界面。
   
    表1MySQL数据库连接参数 
   | 参数名             | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 取值样例            |
   |:---|:---|:---|
   | 名称              | 连接的名称，根据连接的数据源类型，用户可自定义便于记忆、区分的连接名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | mysql_link      |
   | 数据库服务器          | 配置为要连接的数据库的IP地址或域名。 单击输入框后的"选择"，可获取用户的MySQL数据库实例列表。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 192.168.0.1     |
   | 端口              | 配置为要连接的数据库的端口。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 3306            |
   | 数据库名称           | 配置为要连接的数据库名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | dbname          |
   | 用户名             | 待连接数据库的用户。该数据库用户需要有数据表的读写权限，以及对元数据的读取权限。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | cdm             |
   | 密码              | 用户名密码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | -               |
   | 使用本地API         | 可选参数，选择是否使用数据库本地API加速。 创建MySQL连接时，CDM会自动尝试启用MySQL数据库的local_infile系统变量，开启MySQL的LOAD DATA功能加快数据导入，提高导入数据到MySQL数据库的性能。注意，开启本参数后，日期类型将不符合格式的会存储为0000-00-00，更多详细信息可在MySQL官网文档查看。 如果CDM自动启用失败，请联系数据库管理员启用local_infile参数或选择不使用本地API加速。 如果是导入到RDS上的MySQL数据库，由于RDS上的MySQL默认没有开启LOAD DATA功能，所以同时需要修改MySQL实例的参数组，将"local_infile"设置为"ON"，开启该功能。 说明： 如果RDS上的"local_infile"参数组不可编辑，则说明是默认参数组，需要先创建一个新的参数组，再修改该参数值，并应用到RDS的MySQL实例上，具体操作请参见《关系型数据库用户指南》。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 是               |
   | 使用Agent         | Agent功能待下线，无需配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | -               |
   | Agent           | Agent功能待下线，无需配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | -               |
   | local_infile字符集 | MySQL通过local_infile导入数据时，可配置编码格式。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | utf8            |
   | 驱动版本            | 不同类型的关系数据库，需要适配不同的驱动。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | -               |
   | 单次请求行数          | 可选参数，单击"显示高级属性"后显示。 指定每次请求获取的行数，根据数据源端和作业数据规模的大小配置该参数。如果配置过大或过小，可能影响作业的时长。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 1000            |
   | 单次提交行数          | 可选参数，单击"显示高级属性"后显示。 指定每次批量提交的行数，根据数据目的端和作业数据规模的大小配置该参数。如果配置过大或过小，可能影响作业的时长。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | -               |
   | 连接属性            | 可选参数，单击"添加"可增加多个指定数据源的JDBC连接器的属性，参考对应数据库的JDBC连接器说明文档进行配置。 常见配置举例如下： - **connectTimeout=360000** 与**socketTimeout=360000**：迁移数据量较大、或通过查询语句检索全表时，会由于连接超时导致迁移失败。此时可自定义连接超时时间与socket超时时间（单位ms），避免超时导致失败。  - **tinyInt1isBit=** **false** 或**mysql.bool.type.transform=false**：MySQL默认开启配置tinyInt1isBit=true，将TINYINT(1)当作BIT也就是Types.BOOLEAN来处理，会将1或0读取为true或false从而导致迁移失败，此时可关闭配置避免迁移报错。  - **useCursorFetch=false**：CDM作业默认打开了JDBC连接器与关系型数据库通信使用二进制协议开关，即useCursorFetch=true。部分第三方可能存在兼容问题导致迁移时间转换出错，可以关闭此开关；开源MySQL数据库支持useCursorFetch参数，无需对此参数进行设置。  - **allowPublicKeyRetrieval=true**：MySQL默认关闭允许公钥检索机制，因此连接MySQL数据源时，如果TLS不可用、使用RSA公钥加密时，可能导致连接报错。此时可打开公钥检索机制，避免连接报错。   | sslmode=require |
   | 引用符号            | 可选参数，连接引用表名或列名时的分隔符号，参考对应数据库的产品文档进行配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | '               |
   | 单次写入行数          | 指定单次批量写入的行数，当写入行数累计到单次批量提交行数时提交一次，该值应当小于单次提交行数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 100             |
      
   
   
6. 再次选择"连接管理 \> 新建连接"，新建MRS Hive连接。连接器类型选择"MRS Hive"，然后单击"下一步"配置连接参数，参数说明如[表2]所示。配置完成后，单击"保存"回到连接管理界面。
   
   图1配置MRS Hive连接   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001273988736.png "点击放大")
   
    表2MRS Hive连接参数 
   | 参数名        | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 取值样例      |
   |:---|:---|:---|
   | 名称         | 连接的名称，根据连接的数据源类型，用户可自定义便于记忆、区分的连接名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | hive      |
   | Manager IP | MRS Manager的浮动IP地址，可以单击输入框后的"选择"来选定已创建的MRS集群，CDM会自动填充下面的鉴权参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 127.0.0.1 |
   | 认证类型       | 访问MRS的认证类型： - SIMPLE：非安全模式选择Simple鉴权。  - KERBEROS：安全模式选择Kerberos鉴权。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | KERBEROS  |
   | Hive版本     | Hive的版本。根据服务端Hive版本设置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | HIVE_3_X  |
   | 用户名        | 选择KERBEROS鉴权时，需要配置MRS Manager的用户名和密码。从HDFS导出目录时，如果需要创建快照，这里配置的用户需要HDFS系统的管理员权限。 如果要创建MRS安全集群的数据连接，不能使用admin用户。因为admin用户是默认的管理页面用户，这个用户无法作为安全集群的认证用户来使用。您可以创建一个新的MRS用户，然后在创建MRS数据连接时，"用户名"和"密码"填写为新建的MRS用户及其密码。 说明： - 如果CDM集群为2.9.0版本及之后版本，且MRS集群为3.1.0及之后版本，则所创建的用户至少需具备Manager_viewer的角色权限才能在CDM创建连接；如果需要对应组件进行库、表、数据的操作，还需要添加对应组件的用户组权限。  - 如果CDM集群为2.9.0之前的版本，或MRS集群为3.1.0之前的版本，则所创建的用户需要具备Manager_administrator、Manager_tenant或System_administrator权限，才能在CDM创建连接。   | cdm       |
   | 密码         | 访问MRS Manager的用户密码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | -         |
   | OBS支持      | 需服务端支持OBS存储。在创建Hive表时，您可以指定将表存储在OBS中。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 否         |
   | 运行模式       | "HIVE_3_X"版本支持该参数。支持以下模式： - EMBEDDED：连接实例与CDM运行在一起，该模式性能较好。  - STANDALONE：连接实例运行在独立进程。如果CDM需要对接多个Hadoop数据源（MRS、Hadoop或CloudTable），并且既有KERBEROS认证模式又有SIMPLE认证模式，只能使用STANDALONE模式。 说明： STANDALONE模式主要是用来解决版本冲突问题的运行模式。当同一种数据连接的源端或者目的端连接器的版本不一致时，存在jar包冲突的情况，这时需要将源端或目的端放在STANDALONE进程里，防止冲突导致迁移失败。                                                                                                                                                                                                           | EMBEDDED  |
   | 是否使用集群配置   | 您可以通过使用集群配置，简化Hadoop连接参数配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 否         |
      
   
   
 
#### 创建样例作业
1. 单击CDM集群"操作"列的"作业管理"，进入作业管理界面。
2. 进入"表/文件迁移"页签，单击"新建作业"创建MySQL第一个分表mail001到MRS Hive目标表mail的数据集成作业，具体如下图所示。 
   图2新建作业   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001325068473.png "点击放大")
   图3配置基本信息   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001274468516.png "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001553631730.png "点击放大")
   
   
3. 样例作业创建完毕后，如下图查看作业JSON，并复制作业JSON，用于后续数据开发作业配置。
   
   图4查看作业JSON   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001871460686.png "点击放大")
   图5复制作业参数   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001553129114.png "点击放大")
   
   
 
#### 创建数据开发作业
1. 单击工作空间的"数据开发"，进入DataArts Studio数据开发模块。
2. 创建子作业"分表作业"，选择CDM节点，节点属性中作业类型配置为"创建新作业"，并将[步骤2]中复制的作业JSON粘贴到"CDM作业消息体"中。
   
   图6配置CDM作业消息体   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001274308592.png "点击放大")
   
   
3. 编辑"CDM作业消息体"。 
   1. 由于源表有三个，分别为mail001、mail002、mail003，因此需要将作业JSON中的"fromJobConfig.tableName"属性值配置为"mail${num}"，即源表名是通过参数配置。如下图所示：
      图7编辑JSON   
      ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001604464689.png "点击放大") 
   
   2. 由于数据迁移作业名不能重复，因此修改JSON中作业名称"name"属性值配置为"mail${num}"，目的是创建多个CDM集成作业，避免作业名称重复。如下图所示：
      ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
      如果需要创建分库的作业，也可将作业JSON中的源连接修改为变量，方便替换。
      图8编辑JSON   
      ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001609064001.png "点击放大") 
   
   
   
   
4. 添加作业参数num，用于作业JSON中调用。如下图所示： 
   图9添加作业参数num   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001604479561.png "点击放大")
   添加完成后单击"保存并提交版本"，以保存子作业。
   
   
5. 创建主作业"集成管理"，选择For Each节点，每次循环调用分表作业，分别将参数001、002、003传递给子作业，生成不同的分表抽取任务。 
   关键配置如下：
   - 子作业：选择"分表作业"
   
   - 数据集：\[\['001'\],\['002'\],\['003'\]\]
   
   - 子作业参数：@@#{Loop.current\[0\]}@@
     ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
     此处子作业参数的EL表达式需要添加@@。如果不加@@包围，数据集001会被识别为1，导致源表名不存在的问题。
     
    
   如下图所示：
   图10配置关键参数   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001429029152.png "点击放大")
   配置完成后单击"保存并提交版本"，以保存主作业。
   
   
6. 创建主作业和子作业完成后，通过测试运行主作业"集成管理"，检查数据集成作业创建情况。运行成功后，创建并运行CDM子作业成功。 
   图11查看作业创建情况   
   ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001324828625.png "点击放大")
   
   
 
#### 注意事项
- 由于CDM版本不同，某些属性可能不支持，比如fromJobConfig.BatchJob。当创建任务报错时，需要在请求体中删除该属性。如下图所示：
  图12修改属性   
  ![](https://support.huaweicloud.com/bestpractice-dataartsstudio/zh-cn_image_0000001324748429.png "点击放大") 
- CDM节点配置为创建作业时，节点运行会检测是否有同名CDM作业。
  - 如果CDM作业未运行，则按照请求体内容更新同名作业。
  
  - 如果同名CDM作业正在运行中，则等待作业运行完成。此时该CDM作业可能被其他任务启动，可能会导致数据抽取不符合预期（如作业配置未更新、运行时间宏未替换正确等），因此请注意不要启动或者创建多个同名作业。
   
 
