diff --git a/docs/configs/docsdev.js b/docs/configs/docsdev.js
index 813a22424d..c84d7924ce 100644
--- a/docs/configs/docsdev.js
+++ b/docs/configs/docsdev.js
@@ -185,6 +185,10 @@ export default {
title: 'SageMaker',
link: '/en-us/docs/dev/user_doc/guide/task/sagemaker.html',
},
+ {
+ title: 'ChunJun',
+ link: '/en-us/docs/dev/user_doc/guide/task/chunjun.html',
+ },
],
},
{
@@ -626,6 +630,10 @@ export default {
title: 'SageMaker',
link: '/zh-cn/docs/dev/user_doc/guide/task/sagemaker.html',
},
+ {
+ title: 'ChunJun',
+ link: '/zh-cn/docs/dev/user_doc/guide/task/chunjun.html',
+ },
],
},
{
diff --git a/docs/docs/en/guide/task/chunjun.md b/docs/docs/en/guide/task/chunjun.md
new file mode 100644
index 0000000000..b5851f5e88
--- /dev/null
+++ b/docs/docs/en/guide/task/chunjun.md
@@ -0,0 +1,73 @@
+# ChunJun
+
+## Overview
+
+ChunJun task type for executing ChunJun programs. For ChunJun nodes, the worker will execute `${CHUNJUN_HOME}/bin/start-chunjun` to analyze the input json file.
+
+## Create Task
+
+- Click `Project Management -> Project Name -> Workflow Definition`, and click the `Create Workflow` button to enter the DAG editing page.
+- Drag the from the toolbar to the drawing board.
+
+## Task Parameters
+
+| **Parameter** | **Description** |
+| ------- | ---------- |
+| Node name | The node name in a workflow definition is unique. |
+| Run flag | Identifies whether this node schedules normally, if it does not need to execute, select the prohibition execution. |
+| Task priority | When the number of worker threads is insufficient, execute in the order of priority from high to low, and tasks with the same priority will execute in a first-in first-out order. |
+| Description | Describe the function of the node. |
+| Worker group | Assign tasks to the machines of the worker group to execute. If `Default` is selected, randomly select a worker machine for execution. |
+| Environment Name | Configure the environment name in which run the script. |
+| Number of failed retries | The number of times the task failed to resubmit. |
+| Failed retry interval | The time interval (unit minute) for resubmitting the task after a failed task. |
+| Task group name | The task group name. |
+| Priority | The task priority. |
+| Delayed execution time | The time, in minutes, that a task is delayed in execution. |
+| Timeout alarm | Check the timeout alarm and timeout failure. When the task exceeds the "timeout period", an alarm email will be sent and the task execution will fail. |
+| Custom template | Custom the content of the ChunJun node's json profile. |
+| json | json configuration file for ChunJun synchronization. |
+| Custom parameters | It is a user-defined parameter, and will replace the content with `${variable}` in the script.
+| Deploy mode | Execute chunjun task mode, eg local standalone. |
+| Option Parameters | Support such as `-confProp "{\"flink.checkpoint.interval\":60000}"` |
+| Predecessor task | Selecting a predecessor task for the current task will set the selected predecessor task as upstream of the current task. |
+
+## Task Example
+
+This example demonstrates importing data from Hive into MySQL.
+
+### Configuring the ChunJun environment in DolphinScheduler
+
+If you are using the ChunJun task type in a production environment, it is necessary to configure the required environment first. The configuration file is as follows: `/dolphinscheduler/conf/env/dolphinscheduler_env.sh`.
+
+![chunjun_task01](../../../../img/tasks/demo/chunjun_task01.png)
+
+After the environment has been configured, DolphinScheduler needs to be restarted.
+
+### Configuring ChunJun Task Node
+
+As the data to be read from Hive, a custom json is required, refer to: [Hive Json Template](https://github.com/DTStack/chunjun/blob/master/chunjun-examples/json/hive/binlog_hive.json).
+
+After writing the required json file, you can configure the node content by following the steps in the diagram below.
+
+![chunjun_task02](../../../../img/tasks/demo/chunjun_task02.png)
+
+### View run results
+
+![chunjun_task03](../../../../img/tasks/demo/chunjun_task03.png)
+
+### Note
+
+Before execute ${CHUNJUN_HOME}/bin/start-chunjun, need to change the shell ${CHUNJUN_HOME}/bin/start-chunjun, remove '&' in order to run in front.
+
+ such as:
+
+```shell
+nohup $JAVA_RUN -cp $JAR_DIR $CLASS_NAME $@ &
+```
+
+update to following:
+
+```shell
+nohup $JAVA_RUN -cp $JAR_DIR $CLASS_NAME $@
+```
\ No newline at end of file
diff --git a/docs/docs/zh/guide/task/chunjun.md b/docs/docs/zh/guide/task/chunjun.md
new file mode 100644
index 0000000000..cbecc5187e
--- /dev/null
+++ b/docs/docs/zh/guide/task/chunjun.md
@@ -0,0 +1,47 @@
+# ChunJun节点
+
+## 综述
+
+ChunJun 任务类型,用于执行 ChunJun 程序。对于 ChunJun 节点,worker 会通过执行 `${CHUNJUN_HOME}/bin/start-chunjun` 来解析传入的 json 文件。
+
+## 创建任务
+
+- 点击项目管理 -> 项目名称 -> 工作流定义,点击“创建工作流”按钮,进入 DAG 编辑页面;
+- 拖动工具栏的 任务节点到画板中。
+
+## 任务参数
+
+- 节点名称:设置任务节点的名称。一个工作流定义中的节点名称是唯一的。
+- 运行标志:标识这个结点是否能正常调度,如果不需要执行,可以打开禁止执行开关。
+- 描述:描述该节点的功能。
+- 任务优先级:worker 线程数不足时,根据优先级从高到低依次执行,优先级一样时根据先进先出原则执行。
+- Worker 分组:任务分配给 worker 组的机器执行,选择 Default ,会随机选择一台 worker 机执行。
+- 环境名称:配置运行脚本的环境。
+- 任务组名称:任务组的名称。
+- 组内优先级:一个任务组内此任务的优先级。
+- 失败重试次数:任务失败重新提交的次数。
+- 失败重试间隔:任务失败重新提交任务的时间间隔,以分为单位。
+- 延时执行时间:任务延迟执行的时间,以分为单位。
+- 超时警告:勾选超时警告、超时失败,当任务超过“超时时长”后,会发送告警邮件并且任务执行失败。
+- 自定义模板:自定义 ChunJun 节点的 json 配置文件内容,当前支持此种方式。
+- json:ChunJun 同步的 json 配置文件。
+- 自定义参数:用户自定义参数,会替换脚本中以 ${变量} 的内容。
+- 部署方式: 执行ChunJun任务的方式,比如local,standalone等。
+- 选项参数: 支持 `-confProp "{\"flink.checkpoint.interval\":60000}"` 格式。
+- 前置任务:选择当前任务的前置任务,会将被选择的前置任务设置为当前任务的上游。
+
+## 任务样例
+
+该样例演示为从 Hive 数据导入到 MySQL 中。
+
+### 在 DolphinScheduler 中配置 ChunJun 环境
+
+若生产环境中要是使用到 ChunJun 任务类型,则需要先配置好所需的环境。配置文件如下:`/dolphinscheduler/conf/env/dolphinscheduler_env.sh`。
+
+![chunjun_task01](../../../../img/tasks/demo/chunjun_task01.png)
+
+当环境配置完成之后,需要重启 DolphinScheduler。
+
+### 配置 ChunJun 任务节点
+
+从 Hive 中读取数据,所以需要自定义 json,可参考:[Hive Json Template](https://github.com/DTStack/chunjun/blob/master/chunjun-examples/json/hive/binlog_hive.json)
\ No newline at end of file
diff --git a/docs/img/tasks/demo/chunjun_task01.png b/docs/img/tasks/demo/chunjun_task01.png
new file mode 100644
index 0000000000..7ecb8ed730
Binary files /dev/null and b/docs/img/tasks/demo/chunjun_task01.png differ
diff --git a/docs/img/tasks/demo/chunjun_task02.png b/docs/img/tasks/demo/chunjun_task02.png
new file mode 100644
index 0000000000..0950f75b69
Binary files /dev/null and b/docs/img/tasks/demo/chunjun_task02.png differ
diff --git a/docs/img/tasks/demo/chunjun_task03.png b/docs/img/tasks/demo/chunjun_task03.png
new file mode 100644
index 0000000000..9c2d5592a4
Binary files /dev/null and b/docs/img/tasks/demo/chunjun_task03.png differ
diff --git a/docs/img/tasks/icons/chunjun.png b/docs/img/tasks/icons/chunjun.png
new file mode 100644
index 0000000000..b5833c2636
Binary files /dev/null and b/docs/img/tasks/icons/chunjun.png differ
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/pom.xml b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/pom.xml
new file mode 100644
index 0000000000..6929353a9b
--- /dev/null
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/pom.xml
@@ -0,0 +1,52 @@
+
+
+
+
+ dolphinscheduler-task-plugin
+ org.apache.dolphinscheduler
+ dev-SNAPSHOT
+
+ 4.0.0
+
+ dolphinscheduler-task-chunjun
+ jar
+
+
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-datasource-all
+
+
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-spi
+ provided
+
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-task-api
+ ${project.version}
+
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-datasource-api
+ ${project.version}
+
+
+
+
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunConstants.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunConstants.java
new file mode 100644
index 0000000000..c16f0b4e7b
--- /dev/null
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunConstants.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.task.chunjun;
+
+/**
+ * ChunJun constants
+ */
+public class ChunJunConstants {
+
+ public static final String FLINK_CONF_DIR = "${FLINK_HOME}/conf";
+
+ public static final String FLINK_LIB_DIR = "${FLINK_HOME}/lib";
+
+ public static final String HADOOP_CONF_DIR = "${HADOOP_HOME}/etc/hadoop";
+
+}
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunParameters.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunParameters.java
new file mode 100644
index 0000000000..7a31b00c65
--- /dev/null
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunParameters.java
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.task.chunjun;
+
+import org.apache.dolphinscheduler.plugin.task.api.enums.ResourceType;
+import org.apache.dolphinscheduler.plugin.task.api.model.ResourceInfo;
+import org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters;
+import org.apache.dolphinscheduler.plugin.task.api.parameters.resource.ResourceParametersHelper;
+import org.apache.dolphinscheduler.spi.enums.Flag;
+import org.apache.dolphinscheduler.spi.utils.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * chunjun parameters
+ */
+@Setter
+@Getter
+@ToString
+public class ChunJunParameters extends AbstractParameters {
+
+ /**
+ * custom json config,default 1, support custom json
+ */
+ private int customConfig;
+
+ /**
+ * custom config json
+ */
+ private String json;
+
+ /**
+ * other arguments -confProp "{\"flink.checkpoint.interval\":60000}"
+ */
+ private String others;
+
+ /**
+ * deploy mode local standlone yarn-session yarn-per-job
+ */
+ private String deployMode;
+
+ /**
+ * customConfig value is 0, datasource type,eg mysql
+ */
+ private String dsType;
+
+ /**
+ * customConfig value is 0, datasource id int
+ */
+ private int dataSource;
+
+ /**
+ * customConfig value is 0, datasource targetType,eg MYSQL, POSTGRES
+ */
+ private String dtType;
+
+ /**
+ * customConfig value is 0, data target id
+ */
+ private int dataTarget;
+
+ /**
+ * customConfig value is 0, sql
+ */
+ private String sql;
+
+ /**
+ * customConfig value is 0, target table
+ */
+ private String targetTable;
+
+ /**
+ * pre statements
+ */
+ private List preStatements;
+
+ /**
+ * post statements
+ */
+ private List postStatements;
+
+ /**
+ * customConfig value is 0, job speed byte
+ */
+ private int jobSpeedByte;
+
+ /**
+ * customConfig value is 0, job speed record count
+ */
+ private int jobSpeedRecord;
+
+ @Override
+ public boolean checkParameters() {
+ if (customConfig == Flag.NO.ordinal()) {
+ return dataSource != 0 && dataTarget != 0
+ && StringUtils.isNotEmpty(sql)
+ && StringUtils.isNotEmpty(targetTable);
+ } else {
+ return StringUtils.isNotEmpty(json);
+ }
+ }
+
+ @Override
+ public List getResourceFilesList() {
+ return new ArrayList<>();
+ }
+
+ @Override
+ public ResourceParametersHelper getResources() {
+ ResourceParametersHelper resources = super.getResources();
+
+ if (customConfig == Flag.YES.ordinal()) {
+ return resources;
+ }
+ resources.put(ResourceType.DATASOURCE, dataSource);
+ resources.put(ResourceType.DATASOURCE, dataTarget);
+ return resources;
+ }
+}
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunTask.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunTask.java
new file mode 100644
index 0000000000..92a9912eb1
--- /dev/null
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunTask.java
@@ -0,0 +1,257 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.task.chunjun;
+
+import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.EXIT_CODE_FAILURE;
+import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.RWXR_XR_X;
+
+import org.apache.dolphinscheduler.plugin.task.api.AbstractTaskExecutor;
+import org.apache.dolphinscheduler.plugin.task.api.ShellCommandExecutor;
+import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
+import org.apache.dolphinscheduler.plugin.task.api.model.Property;
+import org.apache.dolphinscheduler.plugin.task.api.model.TaskResponse;
+import org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters;
+import org.apache.dolphinscheduler.plugin.task.api.parser.ParamUtils;
+import org.apache.dolphinscheduler.plugin.task.api.parser.ParameterUtils;
+import org.apache.dolphinscheduler.spi.enums.Flag;
+import org.apache.dolphinscheduler.spi.utils.JSONUtils;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.SystemUtils;
+
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
+import java.nio.file.attribute.FileAttribute;
+import java.nio.file.attribute.PosixFilePermission;
+import java.nio.file.attribute.PosixFilePermissions;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * chunjun task
+ */
+public class ChunJunTask extends AbstractTaskExecutor {
+ /**
+ * chunjun path
+ */
+ private static final String CHUNJUN_PATH = "${CHUNJUN_HOME}/bin/start-chunjun";
+
+ /**
+ * chunjun dist
+ */
+ private static final String CHUNJUN_DIST_DIR = "${CHUNJUN_HOME}/chunjun-dist";
+
+ /**
+ * chunJun parameters
+ */
+ private ChunJunParameters chunJunParameters;
+
+ /**
+ * shell command executor
+ */
+ private ShellCommandExecutor shellCommandExecutor;
+
+ /**
+ * taskExecutionContext
+ */
+ private TaskExecutionContext taskExecutionContext;
+
+ public ChunJunTask(TaskExecutionContext taskExecutionContext) {
+ super(taskExecutionContext);
+ this.taskExecutionContext = taskExecutionContext;
+
+ this.shellCommandExecutor = new ShellCommandExecutor(this::logHandle,
+ taskExecutionContext, logger);
+ }
+
+ /**
+ * init chunjun config
+ */
+ @Override
+ public void init() {
+ logger.info("chunjun task params {}", taskExecutionContext.getTaskParams());
+ chunJunParameters = JSONUtils.parseObject(taskExecutionContext.getTaskParams(), ChunJunParameters.class);
+
+ if (!chunJunParameters.checkParameters()) {
+ throw new RuntimeException("chunjun task params is not valid");
+ }
+ }
+
+ /**
+ * run chunjun process
+ *
+ * @throws Exception exception
+ */
+ @Override
+ public void handle() throws Exception {
+ try {
+ Map paramsMap = taskExecutionContext.getPrepareParamsMap();
+
+ String jsonFilePath = buildChunJunJsonFile(paramsMap);
+ String shellCommandFilePath = buildShellCommandFile(jsonFilePath, paramsMap);
+ TaskResponse commandExecuteResult = shellCommandExecutor.run(shellCommandFilePath);
+
+ setExitStatusCode(commandExecuteResult.getExitStatusCode());
+ setAppIds(commandExecuteResult.getAppIds());
+ setProcessId(commandExecuteResult.getProcessId());
+ } catch (Exception e) {
+ logger.error("chunjun task failed.", e);
+ setExitStatusCode(EXIT_CODE_FAILURE);
+ throw e;
+ }
+ }
+
+ /**
+ * build chunjun json file
+ *
+ * @param paramsMap
+ * @return
+ * @throws Exception
+ */
+ private String buildChunJunJsonFile(Map paramsMap)
+ throws Exception {
+ // generate json
+ String fileName = String.format("%s/%s_job.json",
+ taskExecutionContext.getExecutePath(),
+ taskExecutionContext.getTaskAppId());
+
+ String json = null;
+
+ Path path = new File(fileName).toPath();
+ if (Files.exists(path)) {
+ return fileName;
+ }
+
+ if (chunJunParameters.getCustomConfig() == Flag.YES.ordinal()) {
+ json = chunJunParameters.getJson().replaceAll("\\r\\n", "\n");
+ }
+
+ // replace placeholder
+ json = ParameterUtils.convertParameterPlaceholders(json, ParamUtils.convert(paramsMap));
+
+ logger.debug("chunjun job json : {}", json);
+
+ // create chunjun json file
+ FileUtils.writeStringToFile(new File(fileName), json, StandardCharsets.UTF_8);
+ return fileName;
+ }
+
+ /**
+ * create command
+ *
+ * @return shell command file name
+ * @throws Exception if error throws Exception
+ */
+ private String buildShellCommandFile(String jobConfigFilePath, Map paramsMap)
+ throws Exception {
+ // generate scripts
+ String fileName = String.format("%s/%s_node.%s",
+ taskExecutionContext.getExecutePath(),
+ taskExecutionContext.getTaskAppId(),
+ SystemUtils.IS_OS_WINDOWS ? "bat" : "sh");
+
+ Path path = new File(fileName).toPath();
+
+ if (Files.exists(path)) {
+ return fileName;
+ }
+
+ // chunjun command
+ List args = new ArrayList<>();
+
+ args.add(CHUNJUN_PATH);
+ args.add("-mode");
+ args.add(getExecMode(chunJunParameters));
+ args.add("-jobType sync");
+ args.add("-job");
+ args.add(jobConfigFilePath);
+ args.add("-chunjunDistDir");
+ args.add(CHUNJUN_DIST_DIR);
+
+ if (!"local".equalsIgnoreCase(getExecMode(chunJunParameters))) {
+ args.add("-flinkConfDir");
+ args.add(ChunJunConstants.FLINK_CONF_DIR);
+
+ args.add("-flinkLibDir");
+ args.add(ChunJunConstants.FLINK_LIB_DIR);
+
+ args.add("-hadoopConfDir");
+ args.add(ChunJunConstants.HADOOP_CONF_DIR);
+ }
+
+ if (chunJunParameters.getOthers() != null) {
+ args.add(chunJunParameters.getOthers());
+ }
+
+ String command = String.join(" ", args);
+
+ // replace placeholder
+ String chunjunCommand = ParameterUtils.convertParameterPlaceholders(command, ParamUtils.convert(paramsMap));
+
+ logger.info("raw script : {}", chunjunCommand);
+
+ // create shell command file
+ Set perms = PosixFilePermissions.fromString(RWXR_XR_X);
+ FileAttribute> attr = PosixFilePermissions.asFileAttribute(perms);
+
+ if (SystemUtils.IS_OS_WINDOWS) {
+ Files.createFile(path);
+ } else {
+ Files.createFile(path, attr);
+ }
+
+ Files.write(path, chunjunCommand.getBytes(), StandardOpenOption.APPEND);
+
+ return fileName;
+ }
+
+ public String getExecMode(ChunJunParameters chunJunParameters) {
+ if (chunJunParameters.getDeployMode() == null) {
+ return "local";
+ }
+ return chunJunParameters.getDeployMode();
+ }
+
+ /**
+ * get task parameters
+ *
+ * @return AbstractParameters
+ */
+ @Override
+ public AbstractParameters getParameters() {
+ return chunJunParameters;
+ }
+
+ /**
+ * cancel ChunJun process
+ *
+ * @param cancelApplication cancelApplication
+ * @throws Exception if error throws Exception
+ */
+ @Override
+ public void cancelApplication(boolean cancelApplication) throws Exception {
+ // cancel process
+ shellCommandExecutor.cancelApplication();
+ }
+
+}
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunTaskChannel.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunTaskChannel.java
new file mode 100644
index 0000000000..609eeefbcb
--- /dev/null
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunTaskChannel.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.task.chunjun;
+
+import org.apache.dolphinscheduler.plugin.task.api.AbstractTask;
+import org.apache.dolphinscheduler.plugin.task.api.TaskChannel;
+import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
+import org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters;
+import org.apache.dolphinscheduler.plugin.task.api.parameters.ParametersNode;
+import org.apache.dolphinscheduler.plugin.task.api.parameters.resource.ResourceParametersHelper;
+import org.apache.dolphinscheduler.spi.utils.JSONUtils;
+
+/**
+ * chunjun task channel
+ */
+public class ChunJunTaskChannel implements TaskChannel {
+
+ @Override
+ public void cancelApplication(boolean status) {
+
+ }
+
+ @Override
+ public AbstractTask createTask(TaskExecutionContext taskExecutionContext) {
+ return new ChunJunTask(taskExecutionContext);
+ }
+
+ @Override
+ public AbstractParameters parseParameters(ParametersNode parametersNode) {
+ return JSONUtils.parseObject(parametersNode.getTaskParams(), ChunJunParameters.class);
+ }
+
+ @Override
+ public ResourceParametersHelper getResources(String parameters) {
+ return JSONUtils.parseObject(parameters, ChunJunParameters.class).getResources();
+ }
+}
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunTaskChannelFactory.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunTaskChannelFactory.java
new file mode 100644
index 0000000000..06a0de36f1
--- /dev/null
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunTaskChannelFactory.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.task.chunjun;
+
+import org.apache.dolphinscheduler.plugin.task.api.TaskChannel;
+import org.apache.dolphinscheduler.plugin.task.api.TaskChannelFactory;
+import org.apache.dolphinscheduler.spi.params.base.PluginParams;
+
+import java.util.List;
+
+import com.google.auto.service.AutoService;
+
+/**
+ * chunjun task channelFactory
+ */
+@AutoService(TaskChannelFactory.class)
+public class ChunJunTaskChannelFactory implements TaskChannelFactory {
+
+ @Override
+ public TaskChannel create() {
+ return new ChunJunTaskChannel();
+ }
+
+ /**
+ * plugin name
+ * Must be UNIQUE .
+ *
+ * @return this task plugin name
+ */
+ @Override
+ public String getName() {
+ return "CHUNJUN";
+ }
+
+ /**
+ * Returns the configurable parameters that this plugin needs to display on the web ui
+ *
+ * @return this plugin params
+ */
+ @Override
+ public List getParams() {
+ return null;
+ }
+}
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunTaskExecutionContext.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunTaskExecutionContext.java
new file mode 100644
index 0000000000..eb2bfb62d2
--- /dev/null
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/main/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunTaskExecutionContext.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.task.chunjun;
+
+import org.apache.dolphinscheduler.spi.enums.DbType;
+
+import java.io.Serializable;
+
+import lombok.Data;
+
+/**
+ * chunjun taskExecutionContext
+ */
+@Data
+public class ChunJunTaskExecutionContext implements Serializable {
+
+ /**
+ * dataSourceId
+ */
+ private int dataSourceId;
+
+ /**
+ * sourcetype
+ */
+ private DbType sourcetype;
+
+ /**
+ * sourceConnectionParams
+ */
+ private String sourceConnectionParams;
+
+ /**
+ * dataTargetId
+ */
+ private int dataTargetId;
+
+ /**
+ * targetType
+ */
+ private DbType targetType;
+
+ /**
+ * targetConnectionParams
+ */
+ private String targetConnectionParams;
+
+}
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/test/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunConstantsTest.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/test/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunConstantsTest.java
new file mode 100644
index 0000000000..bfdfc60f71
--- /dev/null
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/test/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunConstantsTest.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.task.chunjun;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ChunJunConstantsTest {
+
+ private String flinkConfDir;
+
+ private String flinkLibDir;
+
+ private String hadoopConfDir;
+
+ @Before
+ public void setUp() {
+ flinkConfDir = "${FLINK_HOME}/conf";
+ flinkLibDir = "${FLINK_HOME}/lib";
+ hadoopConfDir = "${HADOOP_HOME}/etc/hadoop";
+ }
+
+ @Test
+ public void testEqualsString() {
+ Assert.assertEquals(ChunJunConstants.FLINK_CONF_DIR, flinkConfDir);
+ Assert.assertEquals(ChunJunConstants.FLINK_LIB_DIR, flinkLibDir);
+ Assert.assertEquals(ChunJunConstants.HADOOP_CONF_DIR, hadoopConfDir);
+ }
+
+}
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/test/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunParametersTest.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/test/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunParametersTest.java
new file mode 100644
index 0000000000..a309e74171
--- /dev/null
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-chunjun/src/test/java/org/apache/dolphinscheduler/plugin/task/chunjun/ChunJunParametersTest.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.plugin.task.chunjun;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ChunJunParametersTest {
+
+ private ChunJunParameters chunJunParameters = new ChunJunParameters();
+
+ @Before
+ public void setUp() {
+ chunJunParameters.setCustomConfig(0);
+ chunJunParameters.setDataSource(1);
+ chunJunParameters.setDataTarget(1);
+ chunJunParameters.setDsType("MYSQL");
+ chunJunParameters.setDtType("MYSQL");
+ chunJunParameters.setJobSpeedByte(1);
+ chunJunParameters.setJobSpeedRecord(1);
+ chunJunParameters.setJson("json");
+ }
+
+ @Test
+ public void testToString() {
+
+ String expected = "ChunJunParameters"
+ + "{"
+ + "customConfig=0, "
+ + "json='json', "
+ + "dsType='MYSQL', "
+ + "dataSource=1, "
+ + "dtType='MYSQL', "
+ + "dataTarget=1, "
+ + "sql='null', "
+ + "targetTable='null', "
+ + "preStatements=null, "
+ + "postStatements=null, "
+ + "jobSpeedByte=1, "
+ + "jobSpeedRecord=1, "
+ + "others=xx, "
+ + "deployMode=local"
+ + "}";
+
+ Assert.assertNotEquals(expected, chunJunParameters.toString());
+ }
+
+ @Test
+ public void testCheckParameters() {
+ Assert.assertFalse(chunJunParameters.checkParameters());
+ }
+
+ @Test
+ public void testGetResourceFilesList() {
+ Assert.assertNotNull(chunJunParameters.getResourceFilesList());
+ }
+
+ @Test
+ public void testGetResources() {
+ Assert.assertNotNull(chunJunParameters.getResources());
+ }
+}
diff --git a/dolphinscheduler-task-plugin/pom.xml b/dolphinscheduler-task-plugin/pom.xml
index a9b094b443..3764a730d9 100644
--- a/dolphinscheduler-task-plugin/pom.xml
+++ b/dolphinscheduler-task-plugin/pom.xml
@@ -58,6 +58,7 @@
dolphinscheduler-task-dvc
dolphinscheduler-task-dinky
dolphinscheduler-task-sagemaker
+ dolphinscheduler-task-chunjun
diff --git a/dolphinscheduler-ui/public/images/task-icons/chunjun.png b/dolphinscheduler-ui/public/images/task-icons/chunjun.png
new file mode 100644
index 0000000000..b47f8ccd57
Binary files /dev/null and b/dolphinscheduler-ui/public/images/task-icons/chunjun.png differ
diff --git a/dolphinscheduler-ui/public/images/task-icons/chunjun_hover.png b/dolphinscheduler-ui/public/images/task-icons/chunjun_hover.png
new file mode 100644
index 0000000000..78bce08ebb
Binary files /dev/null and b/dolphinscheduler-ui/public/images/task-icons/chunjun_hover.png differ
diff --git a/dolphinscheduler-ui/src/locales/en_US/project.ts b/dolphinscheduler-ui/src/locales/en_US/project.ts
index 7f468e13d5..895876ea32 100644
--- a/dolphinscheduler-ui/src/locales/en_US/project.ts
+++ b/dolphinscheduler-ui/src/locales/en_US/project.ts
@@ -527,6 +527,8 @@ export default {
datax_job_runtime_memory_xms: 'Low Limit Value',
datax_job_runtime_memory_xmx: 'High Limit Value',
datax_job_runtime_memory_unit: 'G',
+ chunjun_custom_template: 'Custom Template',
+ chunjun_json_template: 'JSON',
current_hour: 'CurrentHour',
last_1_hour: 'Last1Hour',
last_2_hour: 'Last2Hours',
diff --git a/dolphinscheduler-ui/src/locales/zh_CN/project.ts b/dolphinscheduler-ui/src/locales/zh_CN/project.ts
index 6723442962..58bf4bf974 100644
--- a/dolphinscheduler-ui/src/locales/zh_CN/project.ts
+++ b/dolphinscheduler-ui/src/locales/zh_CN/project.ts
@@ -520,6 +520,8 @@ export default {
datax_job_runtime_memory_xms: '最小内存',
datax_job_runtime_memory_xmx: '最大内存',
datax_job_runtime_memory_unit: 'G',
+ chunjun_custom_template: '自定义模板',
+ chunjun_json_template: 'JSON',
current_hour: '当前小时',
last_1_hour: '前1小时',
last_2_hour: '前2小时',
diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts
index c0f2f25046..6691d67dbe 100644
--- a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts
+++ b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/index.ts
@@ -73,3 +73,5 @@ export { useOpenmldb } from './use-openmldb'
export { useDvc } from './use-dvc'
export { useDinky } from './use-dinky'
export { useSagemaker } from './use-sagemaker'
+export { useChunjun } from './use-chunjun'
+export { useChunjunDeployMode } from './use-chunjun-deploy-mode'
diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-chunjun-deploy-mode.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-chunjun-deploy-mode.ts
new file mode 100644
index 0000000000..9cd5083a9c
--- /dev/null
+++ b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-chunjun-deploy-mode.ts
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { useI18n } from 'vue-i18n'
+import type { IJsonItem } from '../types'
+
+export function useChunjunDeployMode(span = 24): IJsonItem {
+ const { t } = useI18n()
+
+ return {
+ type: 'radio',
+ field: 'deployMode',
+ name: t('project.node.deploy_mode'),
+ options: DEPLOY_MODES,
+ span
+ }
+}
+
+export const DEPLOY_MODES = [
+ {
+ label: 'local',
+ value: 'local'
+ },
+ {
+ label: 'standlone',
+ value: 'standlone'
+ },
+ {
+ label: 'yarn-session',
+ value: 'yarn-session'
+ },
+ {
+ label: 'yarn-per-job',
+ value: 'yarn-per-job'
+ }
+]
diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-chunjun.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-chunjun.ts
new file mode 100644
index 0000000000..f98933ea92
--- /dev/null
+++ b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-chunjun.ts
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { ref, onMounted, watch } from 'vue'
+import { useI18n } from 'vue-i18n'
+import type { IJsonItem } from '../types'
+import { useChunjunDeployMode } from './'
+
+export function useChunjun(model: { [field: string]: any }): IJsonItem[] {
+ const { t } = useI18n()
+
+ const jsonEditorSpan = ref(0)
+ const customParameterSpan = ref(0)
+
+ const initConstants = () => {
+ if (model.customConfig) {
+ jsonEditorSpan.value = 24
+ customParameterSpan.value = 24
+ } else {
+ jsonEditorSpan.value = 0
+ customParameterSpan.value = 0
+ }
+ }
+
+ onMounted(() => {
+ initConstants()
+ })
+
+ watch(
+ () => model.customConfig,
+ () => {
+ initConstants()
+ }
+ )
+
+ return [
+ {
+ type: 'switch',
+ field: 'customConfig',
+ value: true,
+ name: t('project.node.chunjun_custom_template'),
+ props: {
+ disabled: true
+ }
+ },
+ {
+ type: 'editor',
+ field: 'json',
+ name: t('project.node.chunjun_json_template'),
+ span: jsonEditorSpan,
+ validate: {
+ trigger: ['input', 'trigger'],
+ required: true,
+ message: t('project.node.sql_empty_tips')
+ }
+ },
+ {
+ type: 'custom-parameters',
+ field: 'localParams',
+ name: t('project.node.custom_parameters'),
+ span: customParameterSpan,
+ children: [
+ {
+ type: 'input',
+ field: 'prop',
+ span: 10,
+ props: {
+ placeholder: t('project.node.prop_tips'),
+ maxLength: 256
+ },
+ validate: {
+ trigger: ['input', 'blur'],
+ required: true,
+ validator(validate: any, value: string) {
+ if (!value) {
+ return new Error(t('project.node.prop_tips'))
+ }
+
+ const sameItems = model.localParams.filter(
+ (item: { prop: string }) => item.prop === value
+ )
+
+ if (sameItems.length > 1) {
+ return new Error(t('project.node.prop_repeat'))
+ }
+ }
+ }
+ },
+ {
+ type: 'input',
+ field: 'value',
+ span: 10,
+ props: {
+ placeholder: t('project.node.value_tips'),
+ maxLength: 256
+ }
+ }
+ ]
+ },
+ useChunjunDeployMode(24),
+ {
+ type: 'input',
+ field: 'others',
+ name: t('project.node.option_parameters'),
+ props: {
+ type: 'textarea',
+ placeholder: t('project.node.option_parameters_tips')
+ }
+ }
+ ]
+}
diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts
index b6f24d4044..f7ff744b97 100644
--- a/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts
+++ b/dolphinscheduler-ui/src/views/projects/task/components/node/format-data.ts
@@ -402,9 +402,17 @@ export function formatParams(data: INodeData): {
taskParams.sql = data.sql
}
+ if (data.taskType === 'CHUNJUN') {
+ taskParams.customConfig = data.customConfig ? 1 : 0
+ taskParams.json = data.json
+ taskParams.deployMode = data.deployMode
+ taskParams.others = data.others
+ }
+
if (data.taskType === 'PIGEON') {
taskParams.targetJobName = data.targetJobName
}
+
let timeoutNotifyStrategy = ''
if (data.timeoutNotifyStrategy) {
if (data.timeoutNotifyStrategy.length === 1) {
diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts
index 1d16aeef03..81eaa8c023 100644
--- a/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts
+++ b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/index.ts
@@ -41,6 +41,7 @@ import { useOpenmldb } from './use-openmldb'
import { useDvc } from './use-dvc'
import { useDinky } from './use-dinky'
import { userSagemaker } from './use-sagemaker'
+import { useChunjun } from './use-chunjun'
export default {
SHELL: useShell,
@@ -68,5 +69,6 @@ export default {
OPENMLDB: useOpenmldb,
DVC: useDvc,
DINKY: useDinky,
- SAGEMAKER: userSagemaker
+ SAGEMAKER: userSagemaker,
+ CHUNJUN: useChunjun
}
diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-chunjun.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-chunjun.ts
new file mode 100644
index 0000000000..362bd944fb
--- /dev/null
+++ b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-chunjun.ts
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { reactive } from 'vue'
+import * as Fields from '../fields/index'
+import type { IJsonItem, INodeData } from '../types'
+import { ITaskData } from '../types'
+
+export function useChunjun({
+ projectCode,
+ from = 0,
+ readonly,
+ data
+}: {
+ projectCode: number
+ from?: number
+ readonly?: boolean
+ data?: ITaskData
+}) {
+ const model = reactive({
+ name: '',
+ taskType: 'CHUNJUN',
+ flag: 'YES',
+ description: '',
+ deployMode: 'local',
+ timeoutFlag: false,
+ localParams: [],
+ environmentCode: null,
+ failRetryInterval: 1,
+ failRetryTimes: 0,
+ workerGroup: 'default',
+ delayTime: 0,
+ timeout: 30,
+ customConfig: false,
+ preStatements: [],
+ postStatements: [],
+ timeoutNotifyStrategy: ['WARN']
+ } as INodeData)
+
+ let extra: IJsonItem[] = []
+ if (from === 1) {
+ extra = [
+ Fields.useTaskType(model, readonly),
+ Fields.useProcessName({
+ model,
+ projectCode,
+ isCreate: !data?.id,
+ from,
+ processName: data?.processName
+ })
+ ]
+ }
+
+ return {
+ json: [
+ Fields.useName(from),
+ ...extra,
+ Fields.useRunFlag(),
+ Fields.useDescription(),
+ Fields.useTaskPriority(),
+ Fields.useWorkerGroup(),
+ Fields.useEnvironmentName(model, !model.id),
+ ...Fields.useTaskGroup(model, projectCode),
+ ...Fields.useFailed(),
+ Fields.useDelayTime(model),
+ ...Fields.useTimeoutAlarm(model),
+ ...Fields.useChunjun(model),
+ Fields.usePreTasks()
+ ] as IJsonItem[],
+ model
+ }
+}
diff --git a/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts b/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts
index b441c6229c..5f2e4c95f4 100644
--- a/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts
+++ b/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts
@@ -41,6 +41,7 @@ export type TaskType =
| 'DVC'
| 'DINKY'
| 'SAGEMAKER'
+ | 'CHUNJUN'
export const TASK_TYPES_MAP = {
SHELL: {
@@ -133,5 +134,9 @@ export const TASK_TYPES_MAP = {
SAGEMAKER: {
alias: 'SageMaker',
helperLinkDisable: true
+ },
+ CHUNJUN: {
+ alias: 'CHUNJUN',
+ helperLinkDisable: true
}
} as { [key in TaskType]: { alias: string; helperLinkDisable?: boolean } }
diff --git a/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss b/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss
index c22dec8480..bdfb9e3ac4 100644
--- a/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss
+++ b/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag.module.scss
@@ -179,6 +179,9 @@ $bgLight: #ffffff;
&.icon-sagemaker {
background-image: url('/images/task-icons/sagemaker.png');
}
+ &.icon-chunjun {
+ background-image: url('/images/task-icons/chunjun.png');
+ }
}
&:hover {
@@ -261,6 +264,9 @@ $bgLight: #ffffff;
&.icon-sagemaker {
background-image: url('/images/task-icons/sagemaker_hover.png');
}
+ &.icon-chunjun {
+ background-image: url('/images/task-icons/chunjun_hover.png');
+ }
}
}
}
diff --git a/script/env/dolphinscheduler_env.sh b/script/env/dolphinscheduler_env.sh
index 44f0de7792..b326d119a1 100755
--- a/script/env/dolphinscheduler_env.sh
+++ b/script/env/dolphinscheduler_env.sh
@@ -44,5 +44,6 @@ export HIVE_HOME=${HIVE_HOME:-/opt/soft/hive}
export FLINK_HOME=${FLINK_HOME:-/opt/soft/flink}
export DATAX_HOME=${DATAX_HOME:-/opt/soft/datax}
export SEATUNNEL_HOME=${SEATUNNEL_HOME:-/opt/soft/seatunnel}
+export CHUNJUN_HOME=${CHUNJUN_HOME:-/opt/soft/chunjun}
-export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$DATAX_HOME/bin:$SEATUNNEL_HOME/bin:$PATH
+export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$DATAX_HOME/bin:$SEATUNNEL_HOME/bin:$CHUNJUN_HOME/bin:$PATH