DolphinScheduler -> DataWorks

本文介绍了基于LHM调度迁移工具将DolphinScheduler调度任务流迁移到DataWorks的方案与操作流程,包括三步,DolphinScheduler任务导出、调度任务转换、DataWorks任务导入。

一、导出DolphinScheduler调度任务流

导出工具通过调用DolphinSchedulerAPI获取项目空间信息、工作流定义、数据源定义、资源文件等信息,支持DolphinScheduler 1.x、2.x、3.x全版本,操作流程如下。

1 前置条件

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

网络连接测试方法:验证DolphinSchedulerListProject API能否成功返回信息,且返回的列表中包含待迁移的项目;token的获取方式见下一小节。

# DolphinScheduler 1.x
curl -H "token:<YourToken>" -X GET http://<YourIp>:12345/dolphinscheduler/projects/query-project-list

# DolphinScheduler 2.x
curl -H "token:<YourToken>" -X GET http://<YourIp>:12345/dolphinscheduler/projects/list

# DolphinScheduler 3.x
curl -H "token:<YourToken>" -X GET http://<YourIp>:12345/dolphinscheduler/projects/list

2 配置连接信息

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

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

{
  "schedule_datasource": {
    "name": "YourDolphin", // 给你的Dolphin数据源起个名称!
    "type": "DolphinScheduler", // 数据源类型(DolphinScheduler)
    "properties": {
      "endpoint": "http://localhost:12345", // 连接地址
      "project": "综合测试Test", // 项目空间名称
      "token": "***********************" // Token
    },
    "operaterType": "AUTO" // 连接类型(AUTO:通过API自动获取调度信息)
  },
  "conf": {

  }
}

2.1 Endpoint获取方式

连接地址为API连接地址,通常与前端页面所在地址一致,如下图中“http://120.55.X.XXX:12345”。

image.png

DolphinScheduler地址为“http://your-company:12345/dolphinscheduler/ui/home”,则endpoint为“http://your-company:12345”。

DolphinScheduler作为一种开源调度引擎,其API模块也可能存在二开,如遇到调用失败的问题,可以找到其Swagger页面佐以简单的测试对API特性进行确认。

2.2 Token获取方式

在安全中心-令牌管理页面,创建令牌并设置充足的失效时间。

注意,用户的token需要具有对待迁移项目的权限。

image.png

2.3 Project获取方式

打开项目管理页面,复制待迁移的项目名称填写至Project中。

image.png

3 运行调度探查工具

调度探查工具一次运行将产生两个文件,分别存储以下内容:

  1. DolphinScheduler API输出的原始信息(简称ApiOutput包)。

  2. 探查工具解析包,是对原始信息的数据结构标准化(简称ReaderOuput包)。

ReaderOutput是调度导出的最终结果;ApiOutput是中间结果,仅用于导出过程中的问题排查。

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

sh ./bin/run.sh read \
-c ./conf/<你的配置文件>.JSON \
-f ./data/0_OriginalPackage/<API原始信息的保存包>.zip \
-o ./data/1_ReaderOutput/<源端探查导出包>.zip \
-t <PluginName>

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

DolphinScheduler 1.x、2.x、3.x的导出插件分别为dolphinv1-reader、dolphinv2-reader、dolphinv3-reader。

例如,当前需要导出Dolphin Scheduler 3.2.0的项目A:

sh ./bin/run.sh read \
-c ./conf/projectA_read.JSON \
-f ./data/0_OriginalPackage/projectA_ApiOutput.zip \
-o ./data/1_ReaderOutput/projectA_ReaderOutput.zip \
-t dolphinv3-reader

4 查看导出结果

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

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

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

image.png

统计报表:

sheet1“概览”中展示Reader导出结果的汇总信息,取名为“WORKFLOW”、“WORKFLOWNODE”等的sheet中是具体的工作流、节点、资源、函数、数据源信息。

image.png

image.png

统计报表提供了两项特殊能力:

1、报表中工作流、节点的部分属性被允许更改,允许更改的字段以蓝色字体标识。在下一阶段调度转换中,在初始化阶段,工具将获取表格中的属性变更并使其生效。

2、报表允许通过删除工作流子表中的行,使得在转换时跳过这些工作流(工作流黑名单)。注意!若工作流存在相互依赖关系,相关联的工作流需要同批次转换,不可通过黑名单进行分割。分割会产生异常!

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

5 Q&A

5.1 (批量探查)能否一次探查多个项目?

支持,在配置项中project中支持一次填写多个项目名,以单个英文逗号分隔,不可加入空格(这是由于DolphinScheduler的项目名称中可以带空格,因此我们将空格作为名称的一部分进行匹配)。

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

{
  "schedule_datasource": {
    "name": "YourDolphin", // 给你的Dolphin数据源起个名称!
    "type": "DolphinScheduler", // 数据源类型(DolphinScheduler)
    "properties": {
      "endpoint": "http://localhost:12345", // 连接地址
      "project": "项目1,项目2", // 项目空间名称
      "token": "***********************" // Token
    },
    "operaterType": "AUTO" // 连接类型(AUTO:通过API自动获取调度信息)
  },
  "conf": {

  }
}

运行命令中-f和-o入参须填写一个文件夹路径,工具将自动为每个项目分别创建导出包。

sh ./bin/run.sh read \
-c ./conf/<你的配置文件>.JSON \
-f ./data/0_OriginalPackage/ \
-o ./data/1_ReaderOutput/ \
-t <dolphinv1/2/3-reader>

5.2 (手动模式)没有API怎么办?

部分开发者拿掉了DolphinSchedulerAPI模块,以API的连接方式无法获取调度信息。备用方案是手动在./data/0_OriginalPackage/下构造原始信息包,并在配置项中将operaterType修改为MANUAL。工具将以手动构造的原始包为输入,完成DolphinScheduler的探查。

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

{
  "schedule_datasource": {
    "name": "YourDolphin", // 给你的Dolphin数据源起个名称!
    "type": "DolphinScheduler", // 数据源类型(DolphinScheduler)
    "properties": {
      "endpoint": "http://localhost:12345", // 连接地址
      "project": "综合测试Test", // 项目空间名称
      "token": "***********************" // Token
    },
    "operaterType": "MANUAL" // 连接类型(MANUAL:离线模式)
  },
  "conf": {

  }
}

原始包结构示例:

.
├── package_info.JSON
├── projects.JSON
├── projects
│   └── 综合测试Test
│       └── processDefinition
│           └── process_definitions_page_1.JSON
├── datasource
│   └── datasource_page_1.JSON
├── resource
│   └── resources.JSON
└── udfFunction
    └── udf_function_page_1.JSON

package_info.JSON是包信息,其中记录了DolphinScheduler版本。

{
  "version": "3.2.0"
}

projects.JSON是项目信息,手动构造时重点填写id、userId、codename。

[
  {
    "id": 2,
    "userId": 1,
    "code": 16372996967936,
    "name": "综合测试Test",
    "description": "",
    "createTime": "2025-01-20 11:40:39",
    "updateTime": "2025-01-20 11:40:39",
    "perm": 0,
    "defCount": 0,
    "instRunningCount": 0
  }
]

projects文件夹存储了工作流定义。在手动构造时,其下一级目录需修改为项目名称。然后在DolphinScheduler的界面上导出工作流定义,依次重命名为process_definitions_page_*.JSON,并放置于processDefinition下。

image.png

datasource、resource、udfFunction分别是数据源信息、资源文件信息、UDF信息,由于DolphinScheduler界面上缺少导出能力,这些元素可缺省。datasource_page_1.JSON、resources.JSON、udf_function_page_1.JSON中填写空串[]即可。上述元素的缺省对任务流迁移的细节有少量影响,影响涉及Sql节点关联数据源的映射、DataX节点(非自定义模板模式)关联数据源的映射、节点与资源引用关系的迁移等。受影响的节点在DataWorks中会被正常创建,只是节点与数据源、资源的绑定需要在DataWorks中手动配置。

5.3 Token有效,但导出任务流部分丢失怎么办?

首先检查Token是否对项目具有权限。

此外,我们发现DolphinScheduler 1.x部分小版本的API存在导出丢失的情况。可结合导出结果中的统计报表对丢失的任务流进行梳理与补全。

二、DolphinScheduler->DataWorks任务流转换

Dolphin Scheduler作为一种主流开源的调度迁移引擎深受海量用户喜爱,DataWorks完全覆盖了Dolphin Scheduler的调度能力。经迁移工具改造,任务流可实现与Dolphin Scheduler上相同的运行效果。

1 前置条件

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

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

2 转换配置项

2.1 转换配置项模板

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

{
  "conf": {},
  "self": {
    "if.use.default.convert": false,
    "if.use.migrationx.before": false,
    "if.use.dataworks.newidea": true,
    "owner.map": [ // 责任人映射
      {
        "src": "1", // DolphinScheduler用户ID
        "tgt": "202006995118212119" // DataWorks用户ID
      }
    ],
    "conf": [
      {
        "nodes": "all", // 规则组生效范围
        "rule": {
          "settings": {
            // DolphinScheduler Shell节点转换为DataWorks Shell节点
            "workflow.converter.shellNodeType": "DIDE_SHELL",
            // 未知节点默认转换至DataWorks虚拟节点
            "workflow.converter.target.unknownNodeTypeAs": "VIRTUAL",
            // DolphinScheduer SQL节点根据数据源类型转换为对应DataWorks SQL节点或数据库节点
            "workflow.converter.dolphinscheduler.sqlNodeTypeMapping": {
              "CLICKHOUSE": "CLICK_SQL",
              "HIVE": "ODPS_SQL",
              "STARROCKS": "StarRocks",
              "DORIS": "HOLOGRES_SQL",
              "MYSQL": "MYSQL",
              "REDSHIFT": "Redshift",
              "SQLSERVER": "SQLSERVER",
              "PRESTO": "EMR_PRESTO",
              "POSTGRESQL": "POSTGRESQL",
              "ORACLE": "Oracle",
              "ATHENA": "MYSQL"
            },
            // DolphinScheduler数据源、DataWorks数据源名称映射
            "workflow.converter.connection.mapping": {
              "mysqlDb1": "dataworks_mysqlDb1",
              "srDb1": "dataworks_srDb1"
            },
            // Dataworks上绑定的主要计算引擎(EMR/MaxCompute/Hologres)
            "workflow.converter.target.engine.type": "EMR",
            // DolphinScheduler Spark节点转换为DataWorks MaxCompute Spark节点
            "workflow.converter.sparkSubmitAs": "ODPS_SPARK",
            "workflow.converter.sparkVersion": "3.x",
          }
        }
      }
    ]
  },
  "schedule_datasource": {
    "name": "DsProject",
    "type": "DolphinScheduler"
  },
  "target_schedule_datasource": {}
}

2.2 责任人映射

DolphinScheduler会记录任务流的所属用户,对于团队开发而言,所属用户是非常关键的信息。工具支持通过配置DolphinScheduler用户与DataWorks用户的映射,对任务流和节点标记相应的责任人。

DolphinScheduler用户名称与ID通过用户管理页面获取。

image.png

DataWorks工作空间中可以添加用户作为工作空间的成员,用户ID可以在右上角获取。

image.png

也可以在数据开发页面,责任人下拉框中获取ID。

image.png

2.3 节点转换规则

2.3.1 规则的生效范围

节点转换规则的配置规则可设置生效范围,如所有节点按统一规则转换,可以配置"nodes": "all"并填写Settings。通常,用户只需要配置一个all规则组即可。

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

{
  "conf": {},
  "self": {
    "conf": [
      {
        "nodes": "all", // 规则组生效范围为ALL,所有节点依据此规则转换
        "rule": {
          "settings": {
            // Settings
          }
      }
    ]
  }
}

如部分节点使用独立的转换规则,可以在nodes中填写任务ID/Name以指定规则的生效范围,需为一批节点设置时可使用逗号分隔填写生效范围。建议使用ID指定,使用Name指定可能导致误设置。此处也支持使用正则表达式匹配节点名称。此外,强烈建议设置一个normal规则组,为其余节点设置一个默认转换规则。

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

{
  "conf": {},
  "self": {
    "conf": [
      {
        "nodes": "node1Name, node2Id", // 规则组生效范围为node1、node2
        "rule": {
          "settings": {
            // Settings 1
          }
        },
        {
        "nodes": "node3Name, node4Id", // 规则组生效范围为node3、node4
        "rule": {
          "settings": {
            // Settings 2
          }
        },
        {
        "nodes": "regexExpression", // 支持用正则表达式对节点名称进行筛选
        "rule": {
          "settings": {
            // Settings 3
          }
        },
        {
        "nodes": "normal", // 其余节点的转换规则
        "rule": {
          "settings": {
            // Settings 4
          }
        }
        ]
  }
}
2.3.2 转换规则

DolphinScheduler 1.x、2.x、3.x在支持的节点种类上有所差异,因此转换方案与配置项所有不同,具体如下。

2.3.2.1 DolphinScheduler3.x转换配置项

工具当前支持转换的DolphinScheduler 3.x节点包括以下类型:

SHELL、SQL、PYTHON、DATAX、SQOOP、SEATUNNEL、HIVECLI、SPARK(Java, Python, Sql)、MR、PROCEDURE、HTTP、CONDITIONS、SWITCH、DEPENDENT、SUB_PROCESS

其中可配置DataWorks映射规则的包括以下类型:

  • SHELL(workflow.converter.shellNodeType):

推荐转换为DIDE_SHELL, EMR_SHELL, VIRTUAL节点等。

  • SQL(workflow.converter.dolphinscheduler.sqlNodeTypeMapping):

推荐转换为各类SQL节点、数据库节点等。

  • PROCEDURE(workflow.converter.dolphinscheduler.sqlNodeTypeMapping):

推荐转换为各类SQL节点、数据库节点等。

  • PYTHON(workflow.converter.pyNodeType):

推荐转换为PYTHON, PYODPS, PYODPS3, EMR_SHELL等。

  • HIVECLI(workflow.converter.dolphinscheduler.sqlNodeTypeMapping/HIVE):

推荐转换为EMR_HIVE, ODPS_SQL等。

  • SPARK(workflow.converter.sparkSubmitAs):

SparkJava、SparkPython推荐转换为ODPS_SPARK, EMR_SPARK;

SparkSql推荐转换为ODPS_SQL, EMR_SPARK_SQL。

  • MR(workflow.converter.mrNodeType):

推荐转换为ODPS_MR, EMR_MR。

DataWorks节点类型可参考此枚举类:

https://github.com/aliyun/dataworks-spec/blob/b0f4a4fd769215d5f81c0bbe990addd7498df5f4/spec/src/main/java/com/aliyun/dataworks/common/spec/domain/dw/types/CodeProgramType.java#L180

固定转换规则的节点类型:

  • DATAX: 转换为DI节点,支持自定义模板模式(JSON Script模式)和常规模式(前端填写模式)。

支持以下数据源读插件配置项转换:MYSQL -> mysql, POSTGRESQL -> postgresql, ORACLE -> oracle, SQLSERVER -> sqlserver, ODPS -> odps, OSS -> oss, HIVE -> hdfs, HDFS -> hdfs, CLICKHOUSE -> clickhouse, MONGODB -> mongodb;

支持以下数据源写插件配置项转换:MYSQL -> mysql, POSTGRESQL -> postgresql, ORACLE -> oracle, SQLSERVER -> sqlserver, ODPS -> odps, OSS -> oss, HIVE -> hdfs, HDFS -> hdfs, CLICKHOUSE -> clickhouse, MONGODB -> mongodb。

  • SQOOP: 转换为DI节点。

支持以下数据源读插件配置项转换:Mysql -> mysql, Hive -> hive, HDFS -> hdfs;

支持以下数据源写插件配置项转换:Mysql -> mysql, Hive -> hive, HDFS -> hdfs。

  • SEATUNNEL: 转换为DI节点。

暂未支持脚本转换,仅转换节点和调度信息。

  • HTTP: 转换为DIDE_SHELL(通用Shell)节点,迁移工具将请求参数自动拼接为curl命令。

  • SWITCH: 转换为CONTROLLER_BRANCH(分支)节点,迁移前后功能一致。

  • SUB_PROCESS: 转换为SUB_PROCESS节点,迁移前后功能一致;注意,在导入DataWorks时,迁移工具将会将被引用的任务流的“可被引用”开关打开,被引用的任务流只能通过SUB_PROCESS的调用而启动,无法自行调度启动。

image.png

  • DEPENDENT: 转换为VITRTUAL节点,依赖关系转换为节点血缘依赖。如Dependent节点依赖于Workflow A时,依赖关系转换为Workflow A尾节点到Dependent节点的血缘;如Dependent节点依赖于Node A,自来关系转换为Node ADependent节点的血缘。见下图示意:

image.jpegimage.jpeg

  • CONDITIONS: 节点中包含两层逻辑,使用双层CONTROLLER_JOIN(归并)节点进行分别实现。以下图中的Case为例,CONDITIONS有两个上游AB、两个下游CD,逻辑表达式为((!A&B)|(A&!B)|(!A&!B)),若为真则流转至C,若为假则流转至D。上层生成了3个归并节点分别用来计算!A&B、A&!B、!A&!B的结果,下层生成了2个节点,其中一个在((!A&B)|(A&!B)|(!A&!B))==true时触发下游C节点执行,另一个在(!(!A&B)&!(A&!B)&!(!A&!B))==true时触发下游D节点执行,以实现CONDITIONS的效果。

image.jpegimage.jpeg

image.jpeg

2.3.2.2 DolphinScheduler2.x转换配置项

工具当前支持转换的DolphinScheduler 2.x节点包括以下类型:

SHELL、SQL、PYTHON、DATAX、SQOOP、HIVECLI、SPARK(Java, Python, Sql)、MR、PROCEDURE、HTTP、CONDITIONS、SWITCH、DEPENDENT、SUB_PROCESS

DolphinScheduler 3.x相比2.x仅多出一种SEATUNNEL节点,其余节点的转换方案及配置项同DolphinScheduler 3.x一致,可参考上一小节进行配置。

2.3.2.3 DolphinScheduler1.x转换配置项

工具当前支持转换的DolphinScheduler 1.x节点包括以下类型:

SHELL、SQL、PYTHON、DATAX、SQOOP、SPARK(Java, Python, Sql)、MR、CONDITIONS、DEPENDENT、SUB_PROCESS

以上节点转换方案及配置项同DolphinScheduler 3.x一致,可参考上一小节进行配置。

3 运行调度转换工具

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

sh ./bin/run.sh convert \
-c ./conf/<你的配置文件>.JSON \
-f ./data/1_ReaderOutput/<源端探查导出包>.zip \
-o ./data/2_ConverterOutput/<转换结果输出包>.zip \
-t <PluginName>

其中-c为配置文件路径;-fReaderOutput包存储路径;-oConverterOutput包存储路径;-t为转换插件名称,DolphinScheduler 1.x、2.x、3.x的转换插件分别为dolphinv1-dw-conveter、dolphinv2-dw-conveter、dolphinv3-dw-conveter。

例如,当前需要转换的DolphinScheduler 3.x项目A:

sh ./bin/run.sh convert \
-c ./conf/projectA_convert.JSON \
-f ./data/1_ReaderOutput/projectA_ReaderOutput.zip \
-o ./data/2_ConverterOutput/projectA_ConverterOutput.zip \
-t dolphinv3-dw-conveter

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

4 查看转换结果

打开./data/2_ConverterOutput/下的生成包ConverterOutput.zip,可预览导出结果。

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

data/project文件夹是转换完成的调度迁移包本体。

image.png

image.png

统计报表提供了两项特殊能力:

1、报表中工作流、节点的部分属性被允许更改,允许更改的字段以蓝色字体标识。在下一阶段导入DataWorks时,工具将获取表格中的属性变更并使其生效。

2、报表允许通过删除工作流子表中的行,使得在导入DataWorks时跳过这些工作流(工作流黑名单)。注意!若工作流存在相互依赖关系,相关联的工作流需要同批次导入,不可通过黑名单进行分割。分割会产生异常!

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

三、导入DataWorks

LHM迁移工具异构转换已将迁移源端的调度元素转换为DataWorks调度格式,工具得以针对不同的迁移场景提供了统一的上传入口,实现任务流导入DataWorks。

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

1 前置条件

1.1 转换成功

转换工具运行完成,源端调度信息被成功转换为DataWorks调度信息,ConverterOutput.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/2_ConverterOutput/<转换结果输出包>.zip \
-o ./data/4_WriterOutput/<导入结果存储包>.zip \
-t dw-newide-writer

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

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

sh ./bin/run.sh write \
-c ./conf/projectA_write.JSON \
-f ./data/2_ConverterOutput/projectA_ConverterOutput.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文件夹下需要导入的任务流保留、其他任务流删除,重新压缩回压缩包,再运行导入工具。注意,存在相互依赖的任务流需要捆绑导入,否则任务流间的节点血缘将会丢失。