This is an automated email from the ASF dual-hosted git repository.

kirs pushed a commit to branch 1.3.6-prepare
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git


The following commit(s) were added to refs/heads/1.3.6-prepare by this push:
     new 2c6b40c  [1.3.6-prepare][Feature-5028][MR] Support mapreduce name 
#5029 (#5030)
2c6b40c is described below

commit 2c6b40cbd8e9af999fc1e2805a795d829982f39b
Author: Shiwen Cheng <[email protected]>
AuthorDate: Thu Mar 11 12:53:46 2021 +0800

    [1.3.6-prepare][Feature-5028][MR] Support mapreduce name #5029 (#5030)
---
 .../dolphinscheduler/api/utils/CheckUtilsTest.java |  21 +-
 .../apache/dolphinscheduler/common/Constants.java  |  12 +-
 .../common/task/flink/FlinkParameters.java         | 402 ++++++++++-----------
 ...uceParameters.java => MapReduceParameters.java} |  20 +-
 .../common/utils/TaskParametersUtils.java          |   4 +-
 .../server/utils/FlinkArgsUtils.java               |   6 +
 .../server/utils/MapReduceArgsUtils.java           |  85 +++++
 .../server/utils/SparkArgsUtils.java               |   8 +-
 .../server/worker/task/AbstractTask.java           |  12 +-
 .../server/worker/task/flink/FlinkTask.java        | 189 +++++-----
 .../server/worker/task/mr/MapReduceTask.java       |  65 +---
 .../server/worker/task/spark/SparkTask.java        |  21 +-
 .../server/utils/FlinkArgsUtilsTest.java           |   7 +-
 .../server/utils/MapReduceArgsUtilsTest.java       |  95 +++++
 .../server/utils/SparkArgsUtilsTest.java           |   4 +-
 .../home/pages/dag/_source/formModel/tasks/mr.vue  |  17 +
 pom.xml                                            |   1 +
 17 files changed, 575 insertions(+), 394 deletions(-)

diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/CheckUtilsTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/CheckUtilsTest.java
index ccc231f..36d5753 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/CheckUtilsTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/utils/CheckUtilsTest.java
@@ -17,18 +17,20 @@
 
 package org.apache.dolphinscheduler.api.utils;
 
-import org.apache.commons.lang.StringUtils;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import org.apache.dolphinscheduler.api.enums.Status;
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.enums.ProgramType;
 import org.apache.dolphinscheduler.common.enums.TaskType;
 import org.apache.dolphinscheduler.common.process.ResourceInfo;
-import org.apache.dolphinscheduler.common.task.AbstractParameters;
 import org.apache.dolphinscheduler.common.task.datax.DataxParameters;
 import org.apache.dolphinscheduler.common.task.dependent.DependentParameters;
 import org.apache.dolphinscheduler.common.task.flink.FlinkParameters;
 import org.apache.dolphinscheduler.common.task.http.HttpParameters;
-import org.apache.dolphinscheduler.common.task.mr.MapreduceParameters;
+import org.apache.dolphinscheduler.common.task.mr.MapReduceParameters;
 import org.apache.dolphinscheduler.common.task.procedure.ProcedureParameters;
 import org.apache.dolphinscheduler.common.task.python.PythonParameters;
 import org.apache.dolphinscheduler.common.task.shell.ShellParameters;
@@ -36,18 +38,15 @@ import 
org.apache.dolphinscheduler.common.task.spark.SparkParameters;
 import org.apache.dolphinscheduler.common.task.sql.SqlParameters;
 import org.apache.dolphinscheduler.common.task.subprocess.SubProcessParameters;
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
-import org.apache.dolphinscheduler.common.utils.TaskParametersUtils;
+
+import java.util.Map;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
-import java.util.Map;
-
-import static org.junit.Assert.*;
-
 public class CheckUtilsTest {
 
     private static final Logger logger = 
LoggerFactory.getLogger(CheckUtilsTest.class);
@@ -171,8 +170,8 @@ public class CheckUtilsTest {
         sqlParameters.setSql("yy");
         
assertTrue(CheckUtils.checkTaskNodeParameters(JSONUtils.toJsonString(sqlParameters),
 TaskType.SQL.toString()));
 
-        // MapreduceParameters
-        MapreduceParameters mapreduceParameters = new MapreduceParameters();
+        // MapReduceParameters
+        MapReduceParameters mapreduceParameters = new MapReduceParameters();
         
assertFalse(CheckUtils.checkTaskNodeParameters(JSONUtils.toJsonString(mapreduceParameters),
 TaskType.MR.toString()));
 
         ResourceInfo resourceInfoMapreduce = new ResourceInfo();
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
index 0f0a181..b02c8dd 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
@@ -534,9 +534,6 @@ public final class Constants {
 
 
     /**
-     * hadoop params constant
-     */
-    /**
      * jar
      */
     public static final String JAR = "jar";
@@ -547,12 +544,17 @@ public final class Constants {
     public static final String HADOOP = "hadoop";
 
     /**
-     * -D parameter
+     * -D <property>=<value>
      */
     public static final String D = "-D";
 
     /**
-     * -D mapreduce.job.queuename=ququename
+     * -D mapreduce.job.name=name
+     */
+    public static final String MR_NAME = "mapreduce.job.name";
+
+    /**
+     * -D mapreduce.job.queuename=queuename
      */
     public static final String MR_QUEUE = "mapreduce.job.queuename";
 
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/flink/FlinkParameters.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/flink/FlinkParameters.java
index 82613f2..76d68c0 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/flink/FlinkParameters.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/flink/FlinkParameters.java
@@ -29,213 +29,213 @@ import java.util.List;
  */
 public class FlinkParameters extends AbstractParameters {
 
-  /**
-   * major jar
-   */
-  private ResourceInfo mainJar;
-
-  /**
-   * major class
-   */
-  private String mainClass;
-
-  /**
-   * deploy mode  yarn-cluster yarn-local
-   */
-  private String deployMode;
-
-  /**
-   * arguments
-   */
-  private String mainArgs;
-
-  /**
-   * slot count
-   */
-  private int slot;
-
-  /**
-   * parallelism
-   */
-  private int parallelism;
-
-  /**
-   * yarn application name
-   */
-  private String appName;
-
-  /**
-   * taskManager count
-   */
-  private int taskManager;
-
-  /**
-   * job manager memory
-   */
-  private String jobManagerMemory;
-
-  /**
-   * task manager memory
-   */
-  private String taskManagerMemory;
-
-  /**
-   * resource list
-   */
-  private List<ResourceInfo> resourceList = new ArrayList<>();
-
-  /**
-   * The YARN queue to submit to
-   */
-  private String queue;
-
-  /**
-   * other arguments
-   */
-  private String others;
-
-  /**
-   * flink version
-   */
-  private String flinkVersion;
-
-  /**
-   * program type
-   * 0 JAVA,1 SCALA,2 PYTHON
-   */
-  private ProgramType programType;
-
-  public ResourceInfo getMainJar() {
-    return mainJar;
-  }
-
-  public void setMainJar(ResourceInfo mainJar) {
-    this.mainJar = mainJar;
-  }
-
-  public String getMainClass() {
-    return mainClass;
-  }
-
-  public void setMainClass(String mainClass) {
-    this.mainClass = mainClass;
-  }
-
-  public String getDeployMode() {
-    return deployMode;
-  }
-
-  public void setDeployMode(String deployMode) {
-    this.deployMode = deployMode;
-  }
-
-  public String getMainArgs() {
-    return mainArgs;
-  }
-
-  public void setMainArgs(String mainArgs) {
-    this.mainArgs = mainArgs;
-  }
-
-  public int getSlot() {
-    return slot;
-  }
-
-  public void setSlot(int slot) {
-    this.slot = slot;
-  }
-
-  public int getParallelism() {
-    return parallelism;
-  }
-
-  public void setParallelism(int parallelism) {
-    this.parallelism = parallelism;
-  }
-
-  public String getAppName() {
-    return appName;
-  }
-
-  public void setAppName(String appName) {
-    this.appName = appName;
-  }
-
-  public int getTaskManager() {
-    return taskManager;
-  }
-
-  public void setTaskManager(int taskManager) {
-    this.taskManager = taskManager;
-  }
-
-  public String getJobManagerMemory() {
-    return jobManagerMemory;
-  }
-
-  public void setJobManagerMemory(String jobManagerMemory) {
-    this.jobManagerMemory = jobManagerMemory;
-  }
-
-  public String getTaskManagerMemory() {
-    return taskManagerMemory;
-  }
-
-  public void setTaskManagerMemory(String taskManagerMemory) {
-    this.taskManagerMemory = taskManagerMemory;
-  }
-
-  public String getQueue() {
-    return queue;
-  }
-
-  public void setQueue(String queue) {
-    this.queue = queue;
-  }
-
-  public List<ResourceInfo> getResourceList() {
-    return resourceList;
-  }
-
-  public void setResourceList(List<ResourceInfo> resourceList) {
-    this.resourceList = resourceList;
-  }
-
-  public String getOthers() {
-    return others;
-  }
+    /**
+     * major jar
+     */
+    private ResourceInfo mainJar;
+
+    /**
+     * major class
+     */
+    private String mainClass;
+
+    /**
+     * deploy mode  yarn-cluster yarn-local
+     */
+    private String deployMode;
+
+    /**
+     * arguments
+     */
+    private String mainArgs;
+
+    /**
+     * slot count
+     */
+    private int slot;
+
+    /**
+     * parallelism
+     */
+    private int parallelism;
+
+    /**
+     * yarn application name
+     */
+    private String appName;
+
+    /**
+     * taskManager count
+     */
+    private int taskManager;
+
+    /**
+     * job manager memory
+     */
+    private String jobManagerMemory;
+
+    /**
+     * task manager memory
+     */
+    private String taskManagerMemory;
+
+    /**
+     * resource list
+     */
+    private List<ResourceInfo> resourceList = new ArrayList<>();
+
+    /**
+     * The YARN queue to submit to
+     */
+    private String queue;
+
+    /**
+     * other arguments
+     */
+    private String others;
+
+    /**
+     * flink version
+     */
+    private String flinkVersion;
+
+    /**
+     * program type
+     * 0 JAVA,1 SCALA,2 PYTHON
+     */
+    private ProgramType programType;
+
+    public ResourceInfo getMainJar() {
+        return mainJar;
+    }
+
+    public void setMainJar(ResourceInfo mainJar) {
+        this.mainJar = mainJar;
+    }
+
+    public String getMainClass() {
+        return mainClass;
+    }
+
+    public void setMainClass(String mainClass) {
+        this.mainClass = mainClass;
+    }
+
+    public String getDeployMode() {
+        return deployMode;
+    }
+
+    public void setDeployMode(String deployMode) {
+        this.deployMode = deployMode;
+    }
+
+    public String getMainArgs() {
+        return mainArgs;
+    }
+
+    public void setMainArgs(String mainArgs) {
+        this.mainArgs = mainArgs;
+    }
+
+    public int getSlot() {
+        return slot;
+    }
+
+    public void setSlot(int slot) {
+        this.slot = slot;
+    }
+
+    public int getParallelism() {
+        return parallelism;
+    }
+
+    public void setParallelism(int parallelism) {
+        this.parallelism = parallelism;
+    }
+
+    public String getAppName() {
+        return appName;
+    }
+
+    public void setAppName(String appName) {
+        this.appName = appName;
+    }
+
+    public int getTaskManager() {
+        return taskManager;
+    }
+
+    public void setTaskManager(int taskManager) {
+        this.taskManager = taskManager;
+    }
+
+    public String getJobManagerMemory() {
+        return jobManagerMemory;
+    }
+
+    public void setJobManagerMemory(String jobManagerMemory) {
+        this.jobManagerMemory = jobManagerMemory;
+    }
+
+    public String getTaskManagerMemory() {
+        return taskManagerMemory;
+    }
+
+    public void setTaskManagerMemory(String taskManagerMemory) {
+        this.taskManagerMemory = taskManagerMemory;
+    }
+
+    public String getQueue() {
+        return queue;
+    }
+
+    public void setQueue(String queue) {
+        this.queue = queue;
+    }
+
+    public List<ResourceInfo> getResourceList() {
+        return resourceList;
+    }
+
+    public void setResourceList(List<ResourceInfo> resourceList) {
+        this.resourceList = resourceList;
+    }
+
+    public String getOthers() {
+        return others;
+    }
 
-  public void setOthers(String others) {
-    this.others = others;
-  }
+    public void setOthers(String others) {
+        this.others = others;
+    }
 
-  public ProgramType getProgramType() {
-    return programType;
-  }
+    public ProgramType getProgramType() {
+        return programType;
+    }
 
-  public void setProgramType(ProgramType programType) {
-    this.programType = programType;
-  }
+    public void setProgramType(ProgramType programType) {
+        this.programType = programType;
+    }
 
-  public String getFlinkVersion() {
-    return flinkVersion;
-  }
+    public String getFlinkVersion() {
+        return flinkVersion;
+    }
 
-  public void setFlinkVersion(String flinkVersion) {
-    this.flinkVersion = flinkVersion;
-  }
+    public void setFlinkVersion(String flinkVersion) {
+        this.flinkVersion = flinkVersion;
+    }
+
+    @Override
+    public boolean checkParameters() {
+        return mainJar != null && programType != null;
+    }
 
-  @Override
-  public boolean checkParameters() {
-    return mainJar != null && programType != null;
-  }
-
-  @Override
-  public List<ResourceInfo> getResourceFilesList() {
-    if (mainJar != null && !resourceList.contains(mainJar)) {
-      resourceList.add(mainJar);
+    @Override
+    public List<ResourceInfo> getResourceFilesList() {
+        if (mainJar != null && !resourceList.contains(mainJar)) {
+            resourceList.add(mainJar);
+        }
+        return resourceList;
     }
-    return resourceList;
-  }
 
 }
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/mr/MapreduceParameters.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/mr/MapReduceParameters.java
similarity index 91%
rename from 
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/mr/MapreduceParameters.java
rename to 
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/mr/MapReduceParameters.java
index 5126e82..762ee42 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/mr/MapreduceParameters.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/mr/MapReduceParameters.java
@@ -14,17 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package org.apache.dolphinscheduler.common.task.mr;
 
 import org.apache.dolphinscheduler.common.enums.ProgramType;
 import org.apache.dolphinscheduler.common.process.ResourceInfo;
 import org.apache.dolphinscheduler.common.task.AbstractParameters;
-import org.apache.dolphinscheduler.common.utils.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.List;
 
-public class MapreduceParameters extends AbstractParameters {
+/**
+ * mapreduce parameters
+ */
+public class MapReduceParameters extends AbstractParameters {
 
     /**
      * major jar
@@ -47,6 +50,11 @@ public class MapreduceParameters extends AbstractParameters {
     private String others;
 
     /**
+     * app name
+     */
+    private String appName;
+
+    /**
      * queue
      */
     private String queue;
@@ -87,6 +95,14 @@ public class MapreduceParameters extends AbstractParameters {
         this.others = others;
     }
 
+    public String getAppName() {
+        return appName;
+    }
+
+    public void setAppName(String appName) {
+        this.appName = appName;
+    }
+
     public String getQueue() {
         return queue;
     }
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/TaskParametersUtils.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/TaskParametersUtils.java
index a3492f4..021748e 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/TaskParametersUtils.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/TaskParametersUtils.java
@@ -23,7 +23,7 @@ import 
org.apache.dolphinscheduler.common.task.dependent.DependentParameters;
 import org.apache.dolphinscheduler.common.task.datax.DataxParameters;
 import org.apache.dolphinscheduler.common.task.flink.FlinkParameters;
 import org.apache.dolphinscheduler.common.task.http.HttpParameters;
-import org.apache.dolphinscheduler.common.task.mr.MapreduceParameters;
+import org.apache.dolphinscheduler.common.task.mr.MapReduceParameters;
 import org.apache.dolphinscheduler.common.task.procedure.ProcedureParameters;
 import org.apache.dolphinscheduler.common.task.python.PythonParameters;
 import org.apache.dolphinscheduler.common.task.shell.ShellParameters;
@@ -60,7 +60,7 @@ public class TaskParametersUtils {
         case SQL:
           return JSONUtils.parseObject(parameter, SqlParameters.class);
         case MR:
-          return JSONUtils.parseObject(parameter, MapreduceParameters.class);
+          return JSONUtils.parseObject(parameter, MapReduceParameters.class);
         case SPARK:
           return JSONUtils.parseObject(parameter, SparkParameters.class);
         case PYTHON:
diff --git 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/FlinkArgsUtils.java
 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/FlinkArgsUtils.java
index 8b3b691..dbd92e0 100644
--- 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/FlinkArgsUtils.java
+++ 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/FlinkArgsUtils.java
@@ -30,9 +30,15 @@ import java.util.List;
  * flink args utils
  */
 public class FlinkArgsUtils {
+
     private static final String LOCAL_DEPLOY_MODE = "local";
+
     private static final String FLINK_VERSION_BEFORE_1_10 = "<1.10";
 
+    private FlinkArgsUtils() {
+        throw new IllegalStateException("Utility class");
+    }
+
     /**
      * build args
      * @param param flink parameters
diff --git 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/MapReduceArgsUtils.java
 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/MapReduceArgsUtils.java
new file mode 100644
index 0000000..31e182b
--- /dev/null
+++ 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/MapReduceArgsUtils.java
@@ -0,0 +1,85 @@
+/*
+ * 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.server.utils;
+
+import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.enums.ProgramType;
+import org.apache.dolphinscheduler.common.process.ResourceInfo;
+import org.apache.dolphinscheduler.common.task.mr.MapReduceParameters;
+import org.apache.dolphinscheduler.common.utils.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * mapreduce args utils
+ */
+public class MapReduceArgsUtils {
+
+    private MapReduceArgsUtils() {
+        throw new IllegalStateException("Utility class");
+    }
+
+    /**
+     * build args
+     *
+     * @param param param
+     * @return argument list
+     */
+    public static List<String> buildArgs(MapReduceParameters param) {
+        List<String> args = new ArrayList<>();
+
+        ResourceInfo mainJar = param.getMainJar();
+        if (mainJar != null) {
+            args.add(Constants.JAR);
+            args.add(mainJar.getRes());
+        }
+
+        ProgramType programType = param.getProgramType();
+        String mainClass = param.getMainClass();
+        if (programType != null && programType != ProgramType.PYTHON && 
StringUtils.isNotEmpty(mainClass)) {
+            args.add(mainClass);
+        }
+
+        String appName = param.getAppName();
+        if (StringUtils.isNotEmpty(appName)) {
+            args.add(String.format("%s%s=%s", Constants.D, Constants.MR_NAME, 
ArgsUtils.escape(appName)));
+        }
+
+        String others = param.getOthers();
+        if (StringUtils.isEmpty(others) || 
!others.contains(Constants.MR_QUEUE)) {
+            String queue = param.getQueue();
+            if (StringUtils.isNotEmpty(queue)) {
+                args.add(String.format("%s%s=%s", Constants.D, 
Constants.MR_QUEUE, queue));
+            }
+        }
+
+        // -conf -archives -files -libjars -D
+        if (StringUtils.isNotEmpty(others)) {
+            args.add(others);
+        }
+
+        String mainArgs = param.getMainArgs();
+        if (StringUtils.isNotEmpty(mainArgs)) {
+            args.add(mainArgs);
+        }
+
+        return args;
+    }
+
+}
diff --git 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/SparkArgsUtils.java
 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/SparkArgsUtils.java
index 76828f3..1a9aaa6 100644
--- 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/SparkArgsUtils.java
+++ 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/SparkArgsUtils.java
@@ -37,6 +37,10 @@ public class SparkArgsUtils {
 
     private static final String SPARK_ON_YARN = "yarn";
 
+    private SparkArgsUtils() {
+        throw new IllegalStateException("Utility class");
+    }
+
     /**
      * build args
      *
@@ -54,9 +58,9 @@ public class SparkArgsUtils {
         }
         args.add(deployMode);
 
-        ProgramType type = param.getProgramType();
+        ProgramType programType = param.getProgramType();
         String mainClass = param.getMainClass();
-        if (type != null && type != ProgramType.PYTHON && 
StringUtils.isNotEmpty(mainClass)) {
+        if (programType != null && programType != ProgramType.PYTHON && 
StringUtils.isNotEmpty(mainClass)) {
             args.add(Constants.MAIN_CLASS);
             args.add(mainClass);
         }
diff --git 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractTask.java
 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractTask.java
index a892b21..84c5052 100644
--- 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractTask.java
+++ 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/AbstractTask.java
@@ -16,7 +16,8 @@
  */
 package org.apache.dolphinscheduler.server.worker.task;
 
-import org.apache.commons.lang.StringUtils;
+import static ch.qos.logback.classic.ClassicConstants.FINALIZE_SESSION_MARKER;
+
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.enums.CommandType;
 import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
@@ -27,7 +28,7 @@ import 
org.apache.dolphinscheduler.common.task.AbstractParameters;
 import org.apache.dolphinscheduler.common.task.conditions.ConditionsParameters;
 import org.apache.dolphinscheduler.common.task.datax.DataxParameters;
 import org.apache.dolphinscheduler.common.task.flink.FlinkParameters;
-import org.apache.dolphinscheduler.common.task.mr.MapreduceParameters;
+import org.apache.dolphinscheduler.common.task.mr.MapReduceParameters;
 import org.apache.dolphinscheduler.common.task.procedure.ProcedureParameters;
 import org.apache.dolphinscheduler.common.task.python.PythonParameters;
 import org.apache.dolphinscheduler.common.task.shell.ShellParameters;
@@ -38,12 +39,13 @@ import org.apache.dolphinscheduler.common.utils.JSONUtils;
 import org.apache.dolphinscheduler.dao.TaskRecordDao;
 import org.apache.dolphinscheduler.server.entity.TaskExecutionContext;
 import org.apache.dolphinscheduler.server.utils.ParamUtils;
-import org.slf4j.Logger;
+
+import org.apache.commons.lang.StringUtils;
 
 import java.util.List;
 import java.util.Map;
 
-import static ch.qos.logback.classic.ClassicConstants.FINALIZE_SESSION_MARKER;
+import org.slf4j.Logger;
 
 /**
  * executive task
@@ -222,7 +224,7 @@ public abstract class AbstractTask {
                 paramsClass = ProcedureParameters.class;
                 break;
             case MR:
-                paramsClass = MapreduceParameters.class;
+                paramsClass = MapReduceParameters.class;
                 break;
             case SPARK:
                 paramsClass = SparkParameters.class;
diff --git 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/flink/FlinkTask.java
 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/flink/FlinkTask.java
index 9de28e3..4d34190 100644
--- 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/flink/FlinkTask.java
+++ 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/flink/FlinkTask.java
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package org.apache.dolphinscheduler.server.worker.task.flink;
 
 import org.apache.dolphinscheduler.common.enums.CommandType;
@@ -21,129 +22,127 @@ import 
org.apache.dolphinscheduler.common.process.Property;
 import org.apache.dolphinscheduler.common.process.ResourceInfo;
 import org.apache.dolphinscheduler.common.task.AbstractParameters;
 import org.apache.dolphinscheduler.common.task.flink.FlinkParameters;
-import org.apache.dolphinscheduler.common.utils.*;
+import org.apache.dolphinscheduler.common.utils.JSONUtils;
 import org.apache.dolphinscheduler.common.utils.ParameterUtils;
 import org.apache.dolphinscheduler.common.utils.StringUtils;
-import org.apache.dolphinscheduler.server.entity.TaskExecutionContext;
 import org.apache.dolphinscheduler.dao.entity.Resource;
+import org.apache.dolphinscheduler.server.entity.TaskExecutionContext;
 import org.apache.dolphinscheduler.server.utils.FlinkArgsUtils;
 import org.apache.dolphinscheduler.server.utils.ParamUtils;
 import org.apache.dolphinscheduler.server.worker.task.AbstractYarnTask;
-import org.slf4j.Logger;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import org.slf4j.Logger;
+
 /**
  * flink task
  */
 public class FlinkTask extends AbstractYarnTask {
 
-  /**
-   *  flink command
-   *  usage: flink run [OPTIONS] <jar-file> <arguments>
-   */
-  private static final String FLINK_COMMAND = "flink";
-  private static final String FLINK_RUN = "run";
-
-  /**
-   *  flink parameters
-   */
-  private FlinkParameters flinkParameters;
-
-  /**
-   * taskExecutionContext
-   */
-  private TaskExecutionContext taskExecutionContext;
-
-  public FlinkTask(TaskExecutionContext taskExecutionContext, Logger logger) {
-    super(taskExecutionContext, logger);
-    this.taskExecutionContext = taskExecutionContext;
-  }
+    /**
+     *  flink command
+     *  usage: flink run [OPTIONS] <jar-file> <arguments>
+     */
+    private static final String FLINK_COMMAND = "flink";
+    private static final String FLINK_RUN = "run";
+
+    /**
+     *  flink parameters
+     */
+    private FlinkParameters flinkParameters;
+
+    /**
+     * taskExecutionContext
+     */
+    private TaskExecutionContext taskExecutionContext;
+
+    public FlinkTask(TaskExecutionContext taskExecutionContext, Logger logger) 
{
+        super(taskExecutionContext, logger);
+        this.taskExecutionContext = taskExecutionContext;
+    }
 
-  @Override
-  public void init() {
+    @Override
+    public void init() {
 
-    logger.info("flink task params {}", taskExecutionContext.getTaskParams());
+        logger.info("flink task params {}", 
taskExecutionContext.getTaskParams());
 
-    flinkParameters = 
JSONUtils.parseObject(taskExecutionContext.getTaskParams(), 
FlinkParameters.class);
+        flinkParameters = 
JSONUtils.parseObject(taskExecutionContext.getTaskParams(), 
FlinkParameters.class);
 
-    if (!flinkParameters.checkParameters()) {
-      throw new RuntimeException("flink task params is not valid");
+        if (flinkParameters == null || !flinkParameters.checkParameters()) {
+            throw new RuntimeException("flink task params is not valid");
+        }
+        flinkParameters.setQueue(taskExecutionContext.getQueue());
+        setMainJarName();
+
+        if (StringUtils.isNotEmpty(flinkParameters.getMainArgs())) {
+            String args = flinkParameters.getMainArgs();
+
+            // replace placeholder
+            Map<String, Property> paramsMap = 
ParamUtils.convert(ParamUtils.getUserDefParamsMap(taskExecutionContext.getDefinedParams()),
+                    taskExecutionContext.getDefinedParams(),
+                    flinkParameters.getLocalParametersMap(),
+                    
CommandType.of(taskExecutionContext.getCmdTypeIfComplement()),
+                    taskExecutionContext.getScheduleTime());
+
+            logger.info("param Map : {}", paramsMap);
+            if (paramsMap != null) {
+                args = ParameterUtils.convertParameterPlaceholders(args, 
ParamUtils.convert(paramsMap));
+                logger.info("param args : {}", args);
+            }
+            flinkParameters.setMainArgs(args);
+        }
     }
-    flinkParameters.setQueue(taskExecutionContext.getQueue());
-    setMainJarName();
 
+    /**
+     * create command
+     * @return command
+     */
+    @Override
+    protected String buildCommand() {
+        // flink run [OPTIONS] <jar-file> <arguments>
+        List<String> args = new ArrayList<>();
 
-    if (StringUtils.isNotEmpty(flinkParameters.getMainArgs())) {
-      String args = flinkParameters.getMainArgs();
+        args.add(FLINK_COMMAND);
+        args.add(FLINK_RUN);
+        logger.info("flink task args : {}", args);
+        // other parameters
+        args.addAll(FlinkArgsUtils.buildArgs(flinkParameters));
 
+        String command = ParameterUtils
+                .convertParameterPlaceholders(String.join(" ", args), 
taskExecutionContext.getDefinedParams());
 
-      // replace placeholder
-      Map<String, Property> paramsMap = 
ParamUtils.convert(ParamUtils.getUserDefParamsMap(taskExecutionContext.getDefinedParams()),
-              taskExecutionContext.getDefinedParams(),
-              flinkParameters.getLocalParametersMap(),
-              CommandType.of(taskExecutionContext.getCmdTypeIfComplement()),
-              taskExecutionContext.getScheduleTime());
+        logger.info("flink task command : {}", command);
 
-      logger.info("param Map : {}", paramsMap);
-      if (paramsMap != null ){
-
-        args = ParameterUtils.convertParameterPlaceholders(args, 
ParamUtils.convert(paramsMap));
-        logger.info("param args : {}", args);
-      }
-      flinkParameters.setMainArgs(args);
+        return command;
     }
-  }
-
-  /**
-   * create command
-   * @return command
-   */
-  @Override
-  protected String buildCommand() {
-    // flink run [OPTIONS] <jar-file> <arguments>
-    List<String> args = new ArrayList<>();
-
-    args.add(FLINK_COMMAND);
-    args.add(FLINK_RUN);
-    logger.info("flink task args : {}", args);
-    // other parameters
-    args.addAll(FlinkArgsUtils.buildArgs(flinkParameters));
-
-    String command = ParameterUtils
-            .convertParameterPlaceholders(String.join(" ", args), 
taskExecutionContext.getDefinedParams());
-
-    logger.info("flink task command : {}", command);
-
-    return command;
-  }
-
-  @Override
-  protected void setMainJarName() {
-    // main jar
-    ResourceInfo mainJar = flinkParameters.getMainJar();
-    if (mainJar != null) {
-      int resourceId = mainJar.getId();
-      String resourceName;
-      if (resourceId == 0) {
-        resourceName = mainJar.getRes();
-      } else {
-        Resource resource = 
processService.getResourceById(flinkParameters.getMainJar().getId());
-        if (resource == null) {
-          logger.error("resource id: {} not exist", resourceId);
-          throw new RuntimeException(String.format("resource id: %d not 
exist", resourceId));
+
+    @Override
+    protected void setMainJarName() {
+        // main jar
+        ResourceInfo mainJar = flinkParameters.getMainJar();
+        if (mainJar != null) {
+            int resourceId = mainJar.getId();
+            String resourceName;
+            if (resourceId == 0) {
+                resourceName = mainJar.getRes();
+            } else {
+                Resource resource = 
processService.getResourceById(flinkParameters.getMainJar().getId());
+                if (resource == null) {
+                    logger.error("resource id: {} not exist", resourceId);
+                    throw new RuntimeException(String.format("resource id: %d 
not exist", resourceId));
+                }
+                resourceName = resource.getFullName().replaceFirst("/", "");
+            }
+            mainJar.setRes(resourceName);
+            flinkParameters.setMainJar(mainJar);
         }
-        resourceName = resource.getFullName().replaceFirst("/", "");
-      }
-      mainJar.setRes(resourceName);
-      flinkParameters.setMainJar(mainJar);
     }
-  }
 
-  @Override
-  public AbstractParameters getParameters() {
-    return flinkParameters;
-  }
+    @Override
+    public AbstractParameters getParameters() {
+        return flinkParameters;
+    }
 }
diff --git 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/mr/MapReduceTask.java
 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/mr/MapReduceTask.java
index 43a7079..f60b1cb 100644
--- 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/mr/MapReduceTask.java
+++ 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/mr/MapReduceTask.java
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package org.apache.dolphinscheduler.server.worker.task.mr;
 
 import org.apache.dolphinscheduler.common.Constants;
@@ -22,12 +23,12 @@ import org.apache.dolphinscheduler.common.enums.ProgramType;
 import org.apache.dolphinscheduler.common.process.Property;
 import org.apache.dolphinscheduler.common.process.ResourceInfo;
 import org.apache.dolphinscheduler.common.task.AbstractParameters;
-import org.apache.dolphinscheduler.common.task.mr.MapreduceParameters;
+import org.apache.dolphinscheduler.common.task.mr.MapReduceParameters;
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
 import org.apache.dolphinscheduler.common.utils.ParameterUtils;
-import org.apache.dolphinscheduler.common.utils.StringUtils;
 import org.apache.dolphinscheduler.dao.entity.Resource;
 import org.apache.dolphinscheduler.server.entity.TaskExecutionContext;
+import org.apache.dolphinscheduler.server.utils.MapReduceArgsUtils;
 import org.apache.dolphinscheduler.server.utils.ParamUtils;
 import org.apache.dolphinscheduler.server.worker.task.AbstractYarnTask;
 
@@ -43,15 +44,15 @@ import org.slf4j.Logger;
 public class MapReduceTask extends AbstractYarnTask {
 
     /**
-     *  map reduce command
+     *  mapreduce command
      *  usage: hadoop jar <jar> [mainClass] [GENERIC_OPTIONS] args...
      */
-    private static final String MAP_REDUCE_COMMAND = Constants.HADOOP;
+    private static final String MAPREDUCE_COMMAND = Constants.HADOOP;
 
     /**
      * mapreduce parameters
      */
-    private MapreduceParameters mapreduceParameters;
+    private MapReduceParameters mapreduceParameters;
 
     /**
      * taskExecutionContext
@@ -73,10 +74,10 @@ public class MapReduceTask extends AbstractYarnTask {
 
         logger.info("mapreduce task params {}", 
taskExecutionContext.getTaskParams());
 
-        this.mapreduceParameters = 
JSONUtils.parseObject(taskExecutionContext.getTaskParams(), 
MapreduceParameters.class);
+        this.mapreduceParameters = 
JSONUtils.parseObject(taskExecutionContext.getTaskParams(), 
MapReduceParameters.class);
 
         // check parameters
-        if (!mapreduceParameters.checkParameters()) {
+        if (mapreduceParameters == null || 
!mapreduceParameters.checkParameters()) {
             throw new RuntimeException("mapreduce task params is not valid");
         }
 
@@ -103,15 +104,15 @@ public class MapReduceTask extends AbstractYarnTask {
     /**
      * build command
      * @return command
-     * @throws Exception exception
      */
     @Override
-    protected String buildCommand() throws Exception {
+    protected String buildCommand() {
         // hadoop jar <jar> [mainClass] [GENERIC_OPTIONS] args...
         List<String> args = new ArrayList<>();
-        args.add(MAP_REDUCE_COMMAND);
+        args.add(MAPREDUCE_COMMAND);
 
-        args.addAll(buildParameters(mapreduceParameters));
+        // other parameters
+        args.addAll(MapReduceArgsUtils.buildArgs(mapreduceParameters));
 
         String command = 
ParameterUtils.convertParameterPlaceholders(String.join(" ", args),
                 taskExecutionContext.getDefinedParams());
@@ -146,46 +147,4 @@ public class MapReduceTask extends AbstractYarnTask {
     public AbstractParameters getParameters() {
         return mapreduceParameters;
     }
-
-    /**
-     * build parameters
-     * @param mapreduceParameters mapreduce parameters
-     * @return parameter list
-     */
-    private List<String> buildParameters(MapreduceParameters 
mapreduceParameters) {
-        List<String> result = new ArrayList<>();
-
-        // main jar
-        if (mapreduceParameters.getMainJar() != null) {
-            result.add(Constants.JAR);
-            result.add(mapreduceParameters.getMainJar().getRes());
-        }
-
-        // main class
-        if (!ProgramType.PYTHON.equals(mapreduceParameters.getProgramType())
-                && StringUtils.isNotEmpty(mapreduceParameters.getMainClass())) 
{
-            result.add(mapreduceParameters.getMainClass());
-        }
-
-        // others
-        if (StringUtils.isNotEmpty(mapreduceParameters.getOthers())) {
-            String others = mapreduceParameters.getOthers();
-            if (!others.contains(Constants.MR_QUEUE)
-                    && StringUtils.isNotEmpty(mapreduceParameters.getQueue())) 
{
-                result.add(String.format("%s %s=%s", Constants.D, 
Constants.MR_QUEUE, mapreduceParameters.getQueue()));
-            }
-
-            result.add(mapreduceParameters.getOthers());
-        } else if (StringUtils.isNotEmpty(mapreduceParameters.getQueue())) {
-            result.add(String.format("%s %s=%s", Constants.D, 
Constants.MR_QUEUE, mapreduceParameters.getQueue()));
-
-        }
-
-        // command args
-        if (StringUtils.isNotEmpty(mapreduceParameters.getMainArgs())) {
-            result.add(mapreduceParameters.getMainArgs());
-        }
-        return result;
-    }
 }
-
diff --git 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/spark/SparkTask.java
 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/spark/SparkTask.java
index 3a27399..f6fec0f 100644
--- 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/spark/SparkTask.java
+++ 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/spark/SparkTask.java
@@ -62,19 +62,19 @@ public class SparkTask extends AbstractYarnTask {
     /**
      * taskExecutionContext
      */
-    private final TaskExecutionContext sparkTaskExecutionContext;
+    private TaskExecutionContext taskExecutionContext;
 
     public SparkTask(TaskExecutionContext taskExecutionContext, Logger logger) 
{
         super(taskExecutionContext, logger);
-        this.sparkTaskExecutionContext = taskExecutionContext;
+        this.taskExecutionContext = taskExecutionContext;
     }
 
     @Override
     public void init() {
 
-        logger.info("spark task params {}", 
sparkTaskExecutionContext.getTaskParams());
+        logger.info("spark task params {}", 
taskExecutionContext.getTaskParams());
 
-        sparkParameters = 
JSONUtils.parseObject(sparkTaskExecutionContext.getTaskParams(), 
SparkParameters.class);
+        sparkParameters = 
JSONUtils.parseObject(taskExecutionContext.getTaskParams(), 
SparkParameters.class);
 
         if (null == sparkParameters) {
             logger.error("Spark params is null");
@@ -84,13 +84,12 @@ public class SparkTask extends AbstractYarnTask {
         if (!sparkParameters.checkParameters()) {
             throw new RuntimeException("spark task params is not valid");
         }
-        sparkParameters.setQueue(sparkTaskExecutionContext.getQueue());
+        sparkParameters.setQueue(taskExecutionContext.getQueue());
         setMainJarName();
     }
 
     /**
      * create command
-     *
      * @return command
      */
     @Override
@@ -98,7 +97,7 @@ public class SparkTask extends AbstractYarnTask {
         // spark-submit [options] <app jar | python file> [app arguments]
         List<String> args = new ArrayList<>();
 
-        //spark version
+        // spark version
         String sparkCommand = SPARK2_COMMAND;
 
         if 
(SparkVersion.SPARK1.name().equals(sparkParameters.getSparkVersion())) {
@@ -111,11 +110,11 @@ public class SparkTask extends AbstractYarnTask {
         args.addAll(SparkArgsUtils.buildArgs(sparkParameters));
 
         // replace placeholder
-        Map<String, Property> paramsMap = 
ParamUtils.convert(ParamUtils.getUserDefParamsMap(sparkTaskExecutionContext.getDefinedParams()),
-            sparkTaskExecutionContext.getDefinedParams(),
+        Map<String, Property> paramsMap = 
ParamUtils.convert(ParamUtils.getUserDefParamsMap(taskExecutionContext.getDefinedParams()),
+            taskExecutionContext.getDefinedParams(),
             sparkParameters.getLocalParametersMap(),
-            CommandType.of(sparkTaskExecutionContext.getCmdTypeIfComplement()),
-            sparkTaskExecutionContext.getScheduleTime());
+            CommandType.of(taskExecutionContext.getCmdTypeIfComplement()),
+            taskExecutionContext.getScheduleTime());
 
         String command = null;
 
diff --git 
a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/FlinkArgsUtilsTest.java
 
b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/FlinkArgsUtilsTest.java
index dd12029..88437a1 100644
--- 
a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/FlinkArgsUtilsTest.java
+++ 
b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/FlinkArgsUtilsTest.java
@@ -53,10 +53,8 @@ public class FlinkArgsUtilsTest {
     public String others = "-s hdfs:///flink/savepoint-1537";
     public String flinkVersion = "<1.10";
 
-
     @Before
-    public void setUp() throws Exception {
-
+    public void setUp() {
         ResourceInfo main = new ResourceInfo();
         main.setRes("testflink-1.0.0-SNAPSHOT.jar");
         mainJar = main;
@@ -67,7 +65,6 @@ public class FlinkArgsUtilsTest {
      */
     @Test
     public void testBuildArgs() {
-
         //Define params
         FlinkParameters param = new FlinkParameters();
         param.setDeployMode(mode);
@@ -134,6 +131,6 @@ public class FlinkArgsUtilsTest {
         param1.setDeployMode(mode);
         result = FlinkArgsUtils.buildArgs(param1);
         assertEquals(5, result.size());
-
     }
+
 }
diff --git 
a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/MapReduceArgsUtilsTest.java
 
b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/MapReduceArgsUtilsTest.java
new file mode 100644
index 0000000..eb68672
--- /dev/null
+++ 
b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/MapReduceArgsUtilsTest.java
@@ -0,0 +1,95 @@
+/*
+ * 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.server.utils;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.enums.ProgramType;
+import org.apache.dolphinscheduler.common.process.ResourceInfo;
+import org.apache.dolphinscheduler.common.task.mr.MapReduceParameters;
+
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Test MapReduceArgsUtils
+ */
+public class MapReduceArgsUtilsTest {
+
+    private static final Logger logger = 
LoggerFactory.getLogger(MapReduceArgsUtilsTest.class);
+
+    public String mainClass = "com.examples.WordCount";
+    public ResourceInfo mainJar = null;
+    public String mainArgs = "/user/joe/wordcount/input 
/user/joe/wordcount/output -skip /user/joe/wordcount/patterns.txt";
+    public ProgramType programType = ProgramType.JAVA;
+    public String others = "-files cachefile.txt -libjars mylib.jar -archives 
myarchive.zip -Dwordcount.case.sensitive=false";
+    public String appName = "mapreduce test";
+    public String queue = "queue1";
+
+    @Before
+    public void setUp() {
+        ResourceInfo main = new ResourceInfo();
+        main.setRes("testspark-1.0.0-SNAPSHOT.jar");
+        mainJar = main;
+    }
+
+    /**
+     * Test buildArgs
+     */
+    @Test
+    public void testBuildArgs() {
+        //Define params
+        MapReduceParameters param = new MapReduceParameters();
+        param.setMainClass(mainClass);
+        param.setMainJar(mainJar);
+        param.setMainArgs(mainArgs);
+        param.setProgramType(programType);
+        param.setOthers(others);
+        param.setAppName(appName);
+        param.setQueue(queue);
+
+        //Invoke buildArgs
+        List<String> result = MapReduceArgsUtils.buildArgs(param);
+        for (String s : result) {
+            logger.info(s);
+        }
+
+        //Expected values and order
+        assertEquals(7, result.size());
+
+        assertEquals("jar", result.get(0));
+        assertEquals(mainJar.getRes(), result.get(1));
+        assertEquals(mainClass, result.get(2));
+        assertEquals(String.format("-D%s=%s", Constants.MR_NAME, 
ArgsUtils.escape(appName)), result.get(3));
+        assertEquals(String.format("-D%s=%s", Constants.MR_QUEUE, queue), 
result.get(4));
+        assertEquals(others, result.get(5));
+        assertEquals(mainArgs, result.get(6));
+
+        //Others param without --queue
+        param.setOthers("-files xxx/hive-site.xml");
+        param.setQueue(null);
+        result = MapReduceArgsUtils.buildArgs(param);
+        assertEquals(6, result.size());
+    }
+
+}
diff --git 
a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/SparkArgsUtilsTest.java
 
b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/SparkArgsUtilsTest.java
index f76c2ea..23a277c 100644
--- 
a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/SparkArgsUtilsTest.java
+++ 
b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/SparkArgsUtilsTest.java
@@ -64,7 +64,6 @@ public class SparkArgsUtilsTest {
      */
     @Test
     public void testBuildArgs() {
-
         //Define params
         SparkParameters param = new SparkParameters();
         param.setDeployMode(mode);
@@ -130,4 +129,5 @@ public class SparkArgsUtilsTest {
         result = SparkArgsUtils.buildArgs(param1);
         assertEquals(7, result.size());
     }
-}
\ No newline at end of file
+
+}
diff --git 
a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/mr.vue 
b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/mr.vue
index d21611e..b0832b7 100644
--- 
a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/mr.vue
+++ 
b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/mr.vue
@@ -50,6 +50,18 @@
       </div>
     </m-list-box>
     <m-list-box>
+      <div slot="text">{{$t('App Name')}}</div>
+      <div slot="content">
+        <x-input
+                :disabled="isDetails"
+                type="input"
+                v-model="appName"
+                :placeholder="$t('Please enter app name(optional)')"
+                autocomplete="off">
+        </x-input>
+      </div>
+    </m-list-box>
+    <m-list-box>
       <div slot="text">{{$t('Main Arguments')}}</div>
       <div slot="content">
         <x-input
@@ -125,6 +137,8 @@
         cacheResourceList: [],
         // Custom parameter
         localParams: [],
+        // MR app name
+        appName: '',
         // Main arguments
         mainArgs: '',
         // Option parameters
@@ -293,6 +307,7 @@
             return {id: v}
           }),
           localParams: this.localParams,
+          appName: this.appName,
           mainArgs: this.mainArgs,
           others: this.others,
           programType: this.programType
@@ -348,6 +363,7 @@
           },
           resourceList: resourceIdArr,
           localParams: this.localParams,
+          appName: this.appName,
           mainArgs: this.mainArgs,
           others: this.others,
           programType: this.programType
@@ -384,6 +400,7 @@
           } else {
             this.mainJar = o.params.mainJar.id || ''
           }
+          this.appName = o.params.appName || ''
           this.mainArgs = o.params.mainArgs || ''
           this.others = o.params.others
           this.programType = o.params.programType || 'JAVA'
diff --git a/pom.xml b/pom.xml
index 31968fb..aff1f98 100644
--- a/pom.xml
+++ b/pom.xml
@@ -820,6 +820,7 @@
                         <include>**/server/utils/DataxUtilsTest.java</include>
                         
<include>**/server/utils/ExecutionContextTestUtils.java</include>
                         
<include>**/server/utils/FlinkArgsUtilsTest.java</include>
+                        
<include>**/server/utils/MapReduceArgsUtilsTest.java</include>
                         <include>**/server/utils/ParamUtilsTest.java</include>
                         
<include>**/server/utils/ProcessUtilsTest.java</include>
                         
<include>**/server/utils/SparkArgsUtilsTest.java</include>

Reply via email to