DataWorks 跨空间迁移

本文介绍了如何将DataWorks调度任务流导出并迁移到另一个工作空间,当前工具仅支持对周期工作流进行迁移。

一、DataWorks导出方案

导出工具通过调用DataWorksSDK获取项目空间信息、工作流定义等信息,为DataWorks任务流跨空间迁移做准备。

1 前置条件

准备JDK17运行环境,打通运行环境和DataWorks的网络连接,下载调度迁移工具到本地并解压缩。

网络连接测试方法:验证能否连接DataWorks Endpoint。

服务接入点列表:

服务接入点

ping dataworks.aliyuncs.com

2 配置连接信息

在工程目录的conf文件夹下创建导出配置文件(JSON格式),如read.json。

  • 使用前请删除json中的注释。

{
  "schedule_datasource": {
    "name": "YourDataWorks",
    "type": "DataWorks",
    "properties": {
      "endpoint": "dataworks.cn-hangzhou.aliyuncs.com", // 服务接入点
      "project": "120000", // 工作空间Id
      "ak": "************", // ak
      "sk": "************" // sk
    },
    "operaterType": "AUTO"
  },
  "conf": {}
}

2.1 服务接入点

根据DataWorks所在Region选择服务接入点,参考文档:

服务接入点

2.2 工作空间ID

打开DataWorks控制台,打开工作空间详情页,从右侧基本信息中获取工作空间ID。

image.png

2.3 创建AK、SK并授权

在用户页创建AK、SK,要求对目标DataWorks工作空间拥有管理员读写权限。

image.png

权限管理包括两处,如果账号是RAM账号,则需先对RAM账号进行DataWorks操作授权。

权限策略页面:https://ram.console.aliyun.com/policies

image.png

image.png

然后在DataWorks工作空间中,将工作空间权限赋给账号。

image.png

注意!AccessKey可设置网络访问限制策略,请务必保证迁移工具所在机器的IP被允许访问。

image.png

3 运行调度探查工具

探查工具通过命令行调用,调用命令如下:

sh ./bin/run.sh read \
-c ./conf/<你的配置文件>.json \
-o ./data/1_ReaderOutput/<源端探查导出包>.zip \
-t dw-newidea-reader

其中-c为配置文件路径,-oReaderOutput包存储路径,-t为探查插件名称。

例如,当前需要导出DataWorks的项目A:

sh ./bin/run.sh read \
-c ./conf/projectA_read.json \
-o ./data/1_ReaderOutput/projectA_ReaderOutput.zip \
-t dw-newidea-reader

探查工具运行中将打印过程信息,请关注运行过程中是否有报错。

4 查看导出结果

打开./data/1_ReaderOutput/下的生成包ReaderOutput.zip,可预览导出结果。

其中,统计报表是对DataWorks中任务流、节点、资源、函数、数据源基本信息的汇总展示。

data/project文件夹下是对DataWorks调度信息数据结构标准化后的结果。

image.png

image.png

image.png

二、DataWorks平迁属性映射

DataWorks跨工作空间平迁时,原空间、目标空间数据源、资源组等可能发生变化,用户需要对调度信息进行修改。为此工具提供了一种便捷的方式,支持用户通过编辑调度统计表批量修改这些属性。

在平迁时,除了因源端、目标端差异必须修改的属性,统计表也支持对常用调度属性的批量设置,以实现用户的治理需求。

1 前置条件

探查工具运行完成,DataWorks调度信息被成功导出,ReaderOutput.zip被成功生成。

(可选,推荐)打开探查导出包,查看统计报表,核对待迁移范围是否被导出完全。

2 修改调度信息

2.1 打开调度统计表

解压缩ReaderOutput.zip,打开包内根目录下的“统计报表.xls”。

image.png

调度统计表以平铺的方式展示了包中Workflow、WorkflowNode、WorkflowResource、Function、DataSource的条目及其主要属性。

工具允许用户通过编辑表格以修改调度属性,表中允许被修改的字段以蓝色字体标识。

image.png

2.2 数据源映射

若用户希望在迁移中更换节点绑定的数据源,可通过修改表格中“相关数据源”字段实现变更。操作如下:

打开WorkflowNode子表,查看各节点绑定的数据源名称。

其中数据集成节点与多个数据源相关,数据集成源端数据源与目标端数据源以“,”分隔,如“odps1,odps2”表示该数据集成任务是从odps1读取写入odps2;如存在分库分表时,源端数据源以空格分隔,如“mysql1 mysql2 mysql3,odps1”表示从mysql1、mysql2、mysql3三个数据源读取写入odps1。

image.png

请确保表格中的数据源在目标DataWorks空间中真实存在,并尽可能填写。当数据源置空时,MaxCompute(ODPS)、EMR、HOLOGRES相关节点将会自动绑定工作空间中默认引擎,其他节点可能存在异常。

2.3 资源组映射

若迁移源端工作空间和目标端工作空间使用了不同的资源组,或用户希望在迁移中更换资源组,可通过修改表格中资源组相关字段实现变更。操作如下:

打开WorkflowNode子表,查看各节点绑定的调度资源组、数据集成资源组名称,并修改为目标DataWorks空间中资源组的信息。

image.png

注意,后续在使用工具将调度信息导入目标DataWorks空间时,导入配置项中也存在资源组设置。若表格中资源组设置有值时,导入工具将优先取用表格中的值;在表格中资源组为空时,导入工具将取用导入配置项中的设置。(即,优先级:表格设置>导入配置项)

资源组的获取方式如下:

2.3.1 资源组获取方式

DataWorks工作空间详情页左侧菜单栏进入资源组页面,绑定资源组,并获取资源组ID。

通用资源组可用于节点调度,也可用于数据集成。配置项中调度资源组resource.group.identifier和数据集成资源组di.resource.group.identifier可以配置为同一通用资源组。

image.png

2.4 更多可修改的属性

该统计报表提供了更多属性的修改能力,在平迁中,用户可根据需求对属性进行修改。

详见使用调度迁移中的统计报表补充修改调度属性

2.5 还原调度信息包

先删除原始调度信息包(原压缩包)。在保存调度统计表后,将包重新压缩回zip格式。

压缩命令参考:

zip -q -r -m -o <PackageName>.zip PackageName

三、导入DataWorks

导入工具支持多轮刷写,会自动选择创建/更新任务流(OverWrite模式)。

1 前置条件

1.1 调度任务完成属性映射

导出工具运行完成、属性值映射完成,ReaderOutput.zip被成功重新构建。

1.2 DataWorks目标端工作空间配置

DataWorks侧需进行以下动作:

1、创建工作空间。

2、创建AK、SK且保证AK、SK对工作空间具有管理员权限。(强烈建议建立与账号有绑定关系的AK、SK,以便在写入遇到问题时进行排查)

3、在工作空间中建立数据源、绑定计算资源、创建资源组。

4、在工作空间中上传文件资源、创建UDF。

1.3 网络连通性检查

验证能否连接DataWorks Endpoint。

服务接入点列表:

服务接入点

ping dataworks.aliyuncs.com

2 导入配置项

在工程目录的conf文件夹下创建导出配置文件(JSON格式),如writer.json。

  • 使用前请删除json中的注释。

{
  "schedule_datasource": {
    "name": "YourDataWorks", //给你的DataWorks数据源起个名字!
    "type": "DataWorks",
    "properties": {
      "endpoint": "dataworks.cn-hangzhou.aliyuncs.com", // 服务接入点
      "project_id": "YourProjectId", // 工作空间ID
      "project_name": "YourProject", // 工作空间名称
      "ak": "************", // AK
      "sk": "************", // SK
    },
    "operaterType": "MANUAL"
  },
  "conf": {
    "di.resource.group.identifier": "Serverless_res_group_***_***", // 调度资源组
    "resource.group.identifier": "Serverless_res_group_***_***", // 数据集成资源组
    "dataworks.node.type.xls": "/Software/bwm-client/conf/CodeProgramType.xls", // DataWorks节点类型表的路径
    "qps.limit": 5 // 向DataWorks发送API请求的QPS上限
  }
}

2.1 服务接入点

根据DataWorks所在Region选择服务接入点,参考文档:

服务接入点

2.2 工作空间ID与名称

打开DataWorks控制台,打开工作空间详情页,从右侧基本信息中获取工作空间ID与名称。

image.png

2.3 创建AK、SK并授权

在用户页创建AK、SK,要求对目标DataWorks工作空间拥有管理员读写权限。

image.png

权限管理包括两处,如果账号是RAM账号,则需先对RAM账号进行DataWorks操作授权。

权限策略页面:https://ram.console.aliyun.com/policies

image.png

image.png

然后在DataWorks工作空间中,将工作空间权限赋给账号。

image.png

注意!AccessKey可设置网络访问限制策略,请务必保证迁移工具所在机器的IP被允许访问。

image.png

2.4 资源组

DataWorks工作空间详情页左侧菜单栏进入资源组页面,绑定资源组,并获取资源组ID。

通用资源组可用于节点调度,也可用于数据集成。配置项中调度资源组resource.group.identifier和数据集成资源组di.resource.group.identifier可以配置为同一通用资源组。

image.png

2.5 QPS设置

工具通过调用DataWorksAPI进行导入操作。不同DataWorks版本中的读、写OpenAPI分别有相应的QPS限制和每日调用次数限制,详见链接:使用限制

DataWorks基础版、标准版、专业版建议填写"qps.limit": 5,企业版建议填写"qps.limit": 20。

注意,请尽可能避免多个导入工具同时运行。

2.6 DataWorks节点类型ID设置

DataWorks中,部分节点类型在不同Region中被分配了不同的TypeId。具体TypeIDDataWorks数据开发实际界面为准。存在此特性的节点类型以数据库节点为主:数据库节点

如:MySQL节点在杭州RegionNodeTypeId1000039、在深圳RegionNodeTypeId1000041。

为适应上述DataWorks不同Region的差异特性,工具提供了一种可配置的方式,允许用户配置工具所使用的节点TypeId表。

image

表格通过导入工具的配置项引入:

"conf": {
    "dataworks.node.type.xls": "/Software/bwm-client/conf/CodeProgramType.xls" // DataWorks节点类型表的路径
 }

DataWorks数据开发界面上获取节点类型Id的方法:在界面上新建一个工作流,并在工作流中新建一个节点,在点击保存后查看工作流的Spec。

image

若节点类型配置错误,在任务流发布时将提示以下错误。

image

3 运行DataWorks导入工具

转换工具通过命令行调用,调用命令如下:

sh ./bin/run.sh write \
-c ./conf/<你的配置文件>.json \
-f ./data/1_ReaderOutput/<导出结果输出包>.zip \
-o ./data/4_WriterOutput/<导入结果存储包>.zip \
-t dw-newide-writer

其中-c为配置文件路径,-fReaderOutput包存储路径,-oWriterOutput包存储路径,-t为提交插件名称。

例如,当前需要导入DataWorks的项目A:

sh ./bin/run.sh write \
-c ./conf/projectA_write.json \
-f ./data/1_ReaderOutput/projectA_ReaderOutput.zip \
-o ./data/4_WriterOutput/projectA_WriterOutput.zip \
-t dw-newide-writer

导入工具运行中将打印过程信息,请关注运行过程中是否有报错。导入完成后将在命令行中打印导入成功与失败的统计信息。注意,部分节点的导入失败不会影响整体导入流程,如遇少量节点导入失败,可在DataWorks中进行手动修改。

4 查看导入结果

导入完成后,可在DataWorks中查看导入结果。导入过程中亦可查看工作流逐个导入的过程,如发现问题需要终止导入,可运行jps命令找到BwmClientApp,并使用kill -9终止导入。

5 Q&A

5.1 源端持续在进行开发,这些增量与变更如何提交到DataWorks?

迁移工具为OverWrite模式,重新运行导出、转换、导入可实现将源端增量提交到DataWorks的能力。请注意,工具将根据全路径匹配任务流以选择创建任务流/更新任务流。如需进行变更迁移,请勿移动任务流。

5.2 源端持续在进行开发,同时进行DataWorks上任务流改造与治理,增量迁移时是否会覆盖DataWorks上的变更?

是的,迁移工具为OverWrite模式,建议您在完成迁移后再在DataWorks上进行后续改造。或者采用分批迁移的方式,已迁移等任务流再确认不再刷写后开始DataWorks改造,不同批次之间互相不会影响。

5.3 整个包导入耗时太长,能否只导入一部分

可以,可手动裁剪待导入包来实现部分导入:将data/project/workflow文件夹下需要导入的任务流保留、其他任务流删除,重新压缩回压缩包,再运行导入工具。注意,存在相互依赖的任务流需要捆绑导入,否则任务流间的节点血缘将会丢失。