From 622ff631c7a3534b44f8e73848a4fed6984efa4f Mon Sep 17 00:00:00 2001 From: norrishuang <12380647@qq.com> Date: Sat, 14 Mar 2026 08:18:29 +0000 Subject: [PATCH 01/10] feat: add Amazon EMR Serverless task plugin - New backend module: dolphinscheduler-task-emr-serverless - EmrServerlessTask: submit/track/cancel via AWS SDK v1 - Auth: reuse aws.emr.* config, fallback to DefaultCredentialsProvider - SPI registration via @AutoService - Frontend: EMR_SERVERLESS task type with form fields - applicationId, executionRoleArn, jobName, startJobRunRequestJson - i18n: en_US + zh_CN - BOM: add aws-java-sdk-emrserverless dependency --- dolphinscheduler-bom/pom.xml | 5 + .../dolphinscheduler-task-all/pom.xml | 6 + .../pom.xml | 60 ++++ .../EmrServerlessParameters.java | 81 +++++ .../task/emrserverless/EmrServerlessTask.java | 318 ++++++++++++++++++ .../EmrServerlessTaskChannel.java | 37 ++ .../EmrServerlessTaskChannelFactory.java | 37 ++ .../EmrServerlessTaskException.java | 31 ++ dolphinscheduler-task-plugin/pom.xml | 1 + .../src/locales/en_US/project.ts | 8 + .../src/locales/zh_CN/project.ts | 8 + .../src/store/project/types.ts | 1 + .../task/components/node/fields/index.ts | 1 + .../node/fields/use-emr-serverless.ts | 82 +++++ .../task/components/node/format-data.ts | 7 + .../task/components/node/tasks/index.ts | 2 + .../node/tasks/use-emr-serverless.ts | 72 ++++ .../projects/task/constants/task-type.ts | 5 + 18 files changed, 762 insertions(+) create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/pom.xml create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessParameters.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTask.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskChannel.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskChannelFactory.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskException.java create mode 100644 dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-emr-serverless.ts create mode 100644 dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-emr-serverless.ts diff --git a/dolphinscheduler-bom/pom.xml b/dolphinscheduler-bom/pom.xml index 21a1e7d96152..22f5e23a3be2 100644 --- a/dolphinscheduler-bom/pom.xml +++ b/dolphinscheduler-bom/pom.xml @@ -752,6 +752,11 @@ aws-java-sdk-emr ${aws-sdk.version} + + com.amazonaws + aws-java-sdk-emrserverless + ${aws-sdk.version} + com.amazonaws aws-java-sdk-s3 diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml b/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml index 8b616170b395..f3e6f8855568 100644 --- a/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-all/pom.xml @@ -112,6 +112,12 @@ ${project.version} + + org.apache.dolphinscheduler + dolphinscheduler-task-emr-serverless + ${project.version} + + org.apache.dolphinscheduler dolphinscheduler-task-zeppelin diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/pom.xml b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/pom.xml new file mode 100644 index 000000000000..e1e046eda113 --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/pom.xml @@ -0,0 +1,60 @@ + + + + 4.0.0 + + org.apache.dolphinscheduler + dolphinscheduler-task-plugin + dev-SNAPSHOT + + + dolphinscheduler-task-emr-serverless + jar + + + task.emr.serverless + + + + + org.apache.dolphinscheduler + dolphinscheduler-task-api + provided + + + + org.apache.dolphinscheduler + dolphinscheduler-aws-authentication + provided + + + + org.apache.dolphinscheduler + dolphinscheduler-common + ${project.version} + provided + + + + com.amazonaws + aws-java-sdk-emrserverless + + + + diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessParameters.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessParameters.java new file mode 100644 index 000000000000..bda8faf49bf6 --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessParameters.java @@ -0,0 +1,81 @@ +/* + * 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.emrserverless; + +import org.apache.dolphinscheduler.plugin.task.api.model.ResourceInfo; +import org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters; + +import org.apache.commons.lang3.StringUtils; + +import java.util.Collections; +import java.util.List; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class EmrServerlessParameters extends AbstractParameters { + + /** + * EMR Serverless Application ID (required). + * The application must be in STARTED or CREATED state. + */ + private String applicationId; + + /** + * IAM execution role ARN for the job run (required). + */ + private String executionRoleArn; + + /** + * Optional job name. If empty, defaults to the task name. + */ + private String jobName; + + /** + * StartJobRun request JSON defining jobDriver and configurationOverrides. + * The applicationId and executionRoleArn fields in this JSON will be overridden + * by the top-level parameters above. + * + * @see API_StartJobRun + */ + private String startJobRunRequestJson; + + @Override + public boolean checkParameters() { + return StringUtils.isNotEmpty(applicationId) + && StringUtils.isNotEmpty(executionRoleArn) + && StringUtils.isNotEmpty(startJobRunRequestJson); + } + + @Override + public List getResourceFilesList() { + return Collections.emptyList(); + } + + @Override + public String toString() { + return "EmrServerlessParameters{" + + "applicationId='" + applicationId + '\'' + + ", executionRoleArn='" + executionRoleArn + '\'' + + ", jobName='" + jobName + '\'' + + ", startJobRunRequestJson='" + startJobRunRequestJson + '\'' + + '}'; + } +} diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTask.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTask.java new file mode 100644 index 000000000000..e34c3c0287c7 --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTask.java @@ -0,0 +1,318 @@ +/* + * 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.emrserverless; + +import static com.fasterxml.jackson.databind.DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT; +import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES; +import static com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL; +import static com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS; + +import org.apache.dolphinscheduler.authentication.aws.AWSCredentialsProviderFactor; +import org.apache.dolphinscheduler.authentication.aws.AwsConfigurationKeys; +import org.apache.dolphinscheduler.common.constants.SystemConstants; +import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.common.utils.PropertyUtils; +import org.apache.dolphinscheduler.plugin.task.api.AbstractRemoteTask; +import org.apache.dolphinscheduler.plugin.task.api.TaskConstants; +import org.apache.dolphinscheduler.plugin.task.api.TaskException; +import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; +import org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters; +import org.apache.dolphinscheduler.plugin.task.api.utils.ParameterUtils; + +import org.apache.commons.lang3.StringUtils; + +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import lombok.extern.slf4j.Slf4j; + +import com.amazonaws.SdkBaseException; +import com.amazonaws.auth.AWSCredentialsProvider; +import com.amazonaws.auth.DefaultAWSCredentialsProviderChain; +import com.amazonaws.services.emrserverless.AWSEMRServerless; +import com.amazonaws.services.emrserverless.AWSEMRServerlessClientBuilder; +import com.amazonaws.services.emrserverless.model.CancelJobRunRequest; +import com.amazonaws.services.emrserverless.model.CancelJobRunResult; +import com.amazonaws.services.emrserverless.model.GetJobRunRequest; +import com.amazonaws.services.emrserverless.model.GetJobRunResult; +import com.amazonaws.services.emrserverless.model.JobRun; +import com.amazonaws.services.emrserverless.model.StartJobRunRequest; +import com.amazonaws.services.emrserverless.model.StartJobRunResult; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.google.common.collect.Sets; + +/** + * Amazon EMR Serverless Task. + *

+ * Submits a job run to an EMR Serverless application and tracks it until completion. + * Supports Spark and Hive job types. + *

+ * + * @since dev-SNAPSHOT + */ +@Slf4j +public class EmrServerlessTask extends AbstractRemoteTask { + + /** + * EMR Serverless job run states that indicate the job is still in progress. + */ + private static final HashSet WAITING_STATES = Sets.newHashSet( + "SUBMITTED", "PENDING", "SCHEDULED", "RUNNING"); + + /** + * ObjectMapper configured for AWS SDK request/response deserialization. + */ + static final ObjectMapper objectMapper = new ObjectMapper() + .configure(FAIL_ON_UNKNOWN_PROPERTIES, false) + .configure(ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true) + .configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, true) + .configure(REQUIRE_SETTERS_FOR_GETTERS, true) + .setTimeZone(SystemConstants.DEFAULT_TIME_ZONE) + .setPropertyNamingStrategy(new PropertyNamingStrategy.UpperCamelCaseStrategy()); + + private final TaskExecutionContext taskExecutionContext; + + private EmrServerlessParameters emrServerlessParameters; + + private AWSEMRServerless emrServerlessClient; + + /** + * applicationId from parameters + */ + private String applicationId; + + /** + * jobRunId returned by StartJobRun or recovered from appIds + */ + private String jobRunId; + + protected EmrServerlessTask(TaskExecutionContext taskExecutionContext) { + super(taskExecutionContext); + this.taskExecutionContext = taskExecutionContext; + } + + @Override + public void init() { + final String taskParams = taskExecutionContext.getTaskParams(); + emrServerlessParameters = JSONUtils.parseObject(taskParams, EmrServerlessParameters.class); + log.info("Initialize EMR Serverless task params: {}", JSONUtils.toPrettyJsonString(taskParams)); + + if (emrServerlessParameters == null || !emrServerlessParameters.checkParameters()) { + throw new EmrServerlessTaskException("EMR Serverless task params are not valid"); + } + + applicationId = emrServerlessParameters.getApplicationId(); + emrServerlessClient = createEmrServerlessClient(); + } + + @Override + public void submitApplication() throws TaskException { + try { + StartJobRunRequest request = buildStartJobRunRequest(); + + log.info("Submitting EMR Serverless job run to application: {}", applicationId); + StartJobRunResult result = emrServerlessClient.startJobRun(request); + + jobRunId = result.getJobRunId(); + // Store applicationId:jobRunId for failover recovery + setAppIds(applicationId + ":" + jobRunId); + log.info("Successfully submitted EMR Serverless job run, jobRunId: {}", jobRunId); + + } catch (EmrServerlessTaskException | SdkBaseException e) { + log.error("EMR Serverless task submit failed", e); + throw new TaskException("EMR Serverless task submit failed", e); + } + } + + @Override + public void trackApplicationStatus() throws TaskException { + try { + // Recover applicationId and jobRunId from appIds if needed (failover case) + if (StringUtils.isEmpty(jobRunId) && StringUtils.isNotEmpty(getAppIds())) { + String[] parts = getAppIds().split(":"); + if (parts.length == 2) { + applicationId = parts[0]; + jobRunId = parts[1]; + log.info("Recovered EMR Serverless job from appIds - applicationId: {}, jobRunId: {}", + applicationId, jobRunId); + } + } + + if (StringUtils.isEmpty(jobRunId)) { + throw new EmrServerlessTaskException("jobRunId is empty, cannot track application status"); + } + + String currentState = getJobRunState(); + while (WAITING_STATES.contains(currentState)) { + TimeUnit.SECONDS.sleep(10); + currentState = getJobRunState(); + } + + final int exitCode = mapStateToExitCode(currentState); + setExitStatusCode(exitCode); + log.info("EMR Serverless job run [{}] finished with state: {}, exitCode: {}", + jobRunId, currentState, exitCode); + + } catch (EmrServerlessTaskException | SdkBaseException e) { + log.error("EMR Serverless task tracking failed", e); + setExitStatusCode(TaskConstants.EXIT_CODE_FAILURE); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new TaskException("EMR Serverless task tracking interrupted", e); + } + } + + @Override + public void cancelApplication() throws TaskException { + if (StringUtils.isEmpty(jobRunId)) { + log.warn("jobRunId is empty, skip cancel"); + return; + } + log.info("Cancelling EMR Serverless job run, applicationId: {}, jobRunId: {}", applicationId, jobRunId); + try { + CancelJobRunRequest request = new CancelJobRunRequest() + .withApplicationId(applicationId) + .withJobRunId(jobRunId); + CancelJobRunResult result = emrServerlessClient.cancelJobRun(request); + log.info("Cancel job run result: {}", result); + } catch (SdkBaseException e) { + throw new TaskException("Failed to cancel EMR Serverless job run", e); + } + } + + @Override + public List getApplicationIds() throws TaskException { + return Collections.emptyList(); + } + + @Override + public AbstractParameters getParameters() { + return emrServerlessParameters; + } + + /** + * Build StartJobRunRequest from parameters and user-provided JSON. + */ + private StartJobRunRequest buildStartJobRunRequest() { + String startJobRunRequestJson; + try { + startJobRunRequestJson = ParameterUtils.convertParameterPlaceholders( + emrServerlessParameters.getStartJobRunRequestJson(), + ParameterUtils.convert(taskExecutionContext.getPrepareParamsMap())); + } catch (Exception e) { + throw new EmrServerlessTaskException("Failed to resolve parameter placeholders", e); + } + + StartJobRunRequest request; + try { + request = objectMapper.readValue(startJobRunRequestJson, StartJobRunRequest.class); + } catch (JsonProcessingException e) { + throw new EmrServerlessTaskException( + "Cannot parse StartJobRunRequest from JSON: " + startJobRunRequestJson, e); + } + + // Override applicationId and executionRoleArn from top-level parameters + request.setApplicationId(applicationId); + request.setExecutionRoleArn(emrServerlessParameters.getExecutionRoleArn()); + + // Set job name if provided + if (StringUtils.isNotEmpty(emrServerlessParameters.getJobName())) { + request.setName(emrServerlessParameters.getJobName()); + } else { + request.setName(taskExecutionContext.getTaskName()); + } + + // Set client token for idempotency + request.setClientToken(taskExecutionContext.getTaskInstanceId() + "-" + System.currentTimeMillis()); + + return request; + } + + /** + * Get the current state of the job run. + */ + private String getJobRunState() { + GetJobRunRequest request = new GetJobRunRequest() + .withApplicationId(applicationId) + .withJobRunId(jobRunId); + GetJobRunResult result = emrServerlessClient.getJobRun(request); + + if (result == null || result.getJobRun() == null) { + throw new EmrServerlessTaskException("Failed to get job run status"); + } + + JobRun jobRun = result.getJobRun(); + String state = jobRun.getState(); + log.info("EMR Serverless job run [applicationId:{}, jobRunId:{}] state: {}", applicationId, jobRunId, state); + return state; + } + + /** + * Map EMR Serverless job run final state to DolphinScheduler exit code. + */ + private int mapStateToExitCode(String state) { + if (state == null) { + return TaskConstants.EXIT_CODE_FAILURE; + } + switch (state) { + case "SUCCESS": + return TaskConstants.EXIT_CODE_SUCCESS; + case "CANCELLED": + return TaskConstants.EXIT_CODE_KILL; + case "FAILED": + default: + return TaskConstants.EXIT_CODE_FAILURE; + } + } + + /** + * Create EMR Serverless client. + * Strategy: try aws.emr.* config first, fallback to DefaultAWSCredentialsProviderChain. + */ + protected AWSEMRServerless createEmrServerlessClient() { + Map awsProperties = PropertyUtils.getByPrefix("aws.emr.", ""); + AWSEMRServerlessClientBuilder builder = AWSEMRServerlessClientBuilder.standard(); + + AWSCredentialsProvider credentialsProvider; + try { + credentialsProvider = AWSCredentialsProviderFactor.credentialsProvider(awsProperties); + log.info("Using AWS credentials from aws.emr.* configuration"); + } catch (Exception e) { + log.info("No valid aws.emr.* credentials config found, falling back to DefaultAWSCredentialsProviderChain"); + credentialsProvider = DefaultAWSCredentialsProviderChain.getInstance(); + } + builder.withCredentials(credentialsProvider); + + String region = awsProperties.get(AwsConfigurationKeys.AWS_REGION); + String endpoint = awsProperties.get(AwsConfigurationKeys.AWS_ENDPOINT); + + if (StringUtils.isNotEmpty(endpoint) && StringUtils.isNotEmpty(region)) { + builder.withEndpointConfiguration( + new com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration(endpoint, region)); + } else if (StringUtils.isNotEmpty(region)) { + builder.withRegion(region); + } + + return builder.build(); + } +} diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskChannel.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskChannel.java new file mode 100644 index 000000000000..a63cea6bbb6a --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskChannel.java @@ -0,0 +1,37 @@ +/* + * 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.emrserverless; + +import org.apache.dolphinscheduler.common.utils.JSONUtils; +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; + +public class EmrServerlessTaskChannel implements TaskChannel { + + @Override + public AbstractTask createTask(TaskExecutionContext taskRequest) { + return new EmrServerlessTask(taskRequest); + } + + @Override + public AbstractParameters parseParameters(String taskParams) { + return JSONUtils.parseObject(taskParams, EmrServerlessParameters.class); + } +} diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskChannelFactory.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskChannelFactory.java new file mode 100644 index 000000000000..74e4b0e7ccab --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskChannelFactory.java @@ -0,0 +1,37 @@ +/* + * 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.emrserverless; + +import org.apache.dolphinscheduler.plugin.task.api.TaskChannel; +import org.apache.dolphinscheduler.plugin.task.api.TaskChannelFactory; + +import com.google.auto.service.AutoService; + +@AutoService(TaskChannelFactory.class) +public class EmrServerlessTaskChannelFactory implements TaskChannelFactory { + + @Override + public String getName() { + return "EMR_SERVERLESS"; + } + + @Override + public TaskChannel create() { + return new EmrServerlessTaskChannel(); + } +} diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskException.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskException.java new file mode 100644 index 000000000000..ea46565b6981 --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskException.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.emrserverless; + +import org.apache.dolphinscheduler.plugin.task.api.TaskException; + +public class EmrServerlessTaskException extends TaskException { + + public EmrServerlessTaskException(String message) { + super(message); + } + + public EmrServerlessTaskException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/dolphinscheduler-task-plugin/pom.xml b/dolphinscheduler-task-plugin/pom.xml index 6f3d727d59b9..830650f50f55 100644 --- a/dolphinscheduler-task-plugin/pom.xml +++ b/dolphinscheduler-task-plugin/pom.xml @@ -62,6 +62,7 @@ dolphinscheduler-task-datafactory dolphinscheduler-task-remoteshell dolphinscheduler-task-aliyunserverlessspark + dolphinscheduler-task-emr-serverless diff --git a/dolphinscheduler-ui/src/locales/en_US/project.ts b/dolphinscheduler-ui/src/locales/en_US/project.ts index 59edc7dfeaed..495f3e8b10d1 100644 --- a/dolphinscheduler-ui/src/locales/en_US/project.ts +++ b/dolphinscheduler-ui/src/locales/en_US/project.ts @@ -741,6 +741,14 @@ export default { emr_flow_define_json_tips: 'Please enter the definition of the job flow.', emr_steps_define_json: 'stepsDefineJson', emr_steps_define_json_tips: 'Please enter the definition of the emr step.', + emr_serverless_application_id: 'Application ID', + emr_serverless_application_id_tips: 'Please enter the EMR Serverless Application ID', + emr_serverless_execution_role_arn: 'Execution Role ARN', + emr_serverless_execution_role_arn_tips: 'Please enter the IAM execution role ARN', + emr_serverless_job_name: 'Job Name', + emr_serverless_job_name_tips: 'Optional. Defaults to the task name if empty', + emr_serverless_start_job_run_json: 'StartJobRun JSON', + emr_serverless_start_job_run_json_tips: 'Please enter the StartJobRun request JSON (jobDriver, configurationOverrides, etc.)', zeppelin_note_id: 'zeppelinNoteId', zeppelin_note_id_tips: 'Please enter the note id of your zeppelin note', zeppelin_paragraph_id: 'zeppelinParagraphId', diff --git a/dolphinscheduler-ui/src/locales/zh_CN/project.ts b/dolphinscheduler-ui/src/locales/zh_CN/project.ts index e6b08093c568..0f3da8189eeb 100644 --- a/dolphinscheduler-ui/src/locales/zh_CN/project.ts +++ b/dolphinscheduler-ui/src/locales/zh_CN/project.ts @@ -723,6 +723,14 @@ export default { emr_flow_define_json_tips: '请输入工作流定义', emr_steps_define_json: 'stepsDefineJson', emr_steps_define_json_tips: '请输入EMR步骤定义', + emr_serverless_application_id: 'Application ID', + emr_serverless_application_id_tips: '请输入 EMR Serverless Application ID', + emr_serverless_execution_role_arn: '执行角色 ARN', + emr_serverless_execution_role_arn_tips: '请输入 IAM 执行角色 ARN', + emr_serverless_job_name: '作业名称', + emr_serverless_job_name_tips: '可选,为空时默认使用任务名称', + emr_serverless_start_job_run_json: 'StartJobRun JSON', + emr_serverless_start_job_run_json_tips: '请输入 StartJobRun 请求 JSON(jobDriver、configurationOverrides 等)', zeppelin_note_id: 'zeppelinNoteId', zeppelin_note_id_tips: '请输入zeppelin note id', zeppelin_paragraph_id: 'zeppelinParagraphId', diff --git a/dolphinscheduler-ui/src/store/project/types.ts b/dolphinscheduler-ui/src/store/project/types.ts index ba7773fa5b14..a58135b3e741 100644 --- a/dolphinscheduler-ui/src/store/project/types.ts +++ b/dolphinscheduler-ui/src/store/project/types.ts @@ -38,6 +38,7 @@ type TaskType = | 'SWITCH' | 'SEATUNNEL' | 'EMR' + | 'EMR_SERVERLESS' | 'ZEPPELIN' | 'K8S' | 'JUPYTER' 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 43c1ed66d138..da4cce0763e5 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 @@ -66,6 +66,7 @@ export { useDataX } from './use-datax' export { useConditions } from './use-conditions' export { useDependent } from './use-dependent' export { useEmr } from './use-emr' +export { useEmrServerless } from './use-emr-serverless' export { useZeppelin } from './use-zeppelin' export { useNamespace } from './use-namespace' export { useK8s } from './use-k8s' diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-emr-serverless.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-emr-serverless.ts new file mode 100644 index 000000000000..ec164275daff --- /dev/null +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-emr-serverless.ts @@ -0,0 +1,82 @@ +/* + * 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 { useCustomParams } from '.' +import type { IJsonItem } from '../types' + +export function useEmrServerless(model: { [field: string]: any }): IJsonItem[] { + const { t } = useI18n() + + return [ + { + type: 'input', + field: 'applicationId', + span: 24, + name: t('project.node.emr_serverless_application_id'), + props: { + placeholder: t('project.node.emr_serverless_application_id_tips') + }, + validate: { + required: true, + trigger: ['input', 'blur'], + message: t('project.node.emr_serverless_application_id_tips') + } + }, + { + type: 'input', + field: 'executionRoleArn', + span: 24, + name: t('project.node.emr_serverless_execution_role_arn'), + props: { + placeholder: t('project.node.emr_serverless_execution_role_arn_tips') + }, + validate: { + required: true, + trigger: ['input', 'blur'], + message: t('project.node.emr_serverless_execution_role_arn_tips') + } + }, + { + type: 'input', + field: 'jobName', + span: 24, + name: t('project.node.emr_serverless_job_name'), + props: { + placeholder: t('project.node.emr_serverless_job_name_tips') + } + }, + { + type: 'editor', + field: 'startJobRunRequestJson', + span: 24, + name: t('project.node.emr_serverless_start_job_run_json'), + props: { + language: 'json' + }, + validate: { + trigger: ['input', 'trigger'], + required: true, + message: t('project.node.emr_serverless_start_job_run_json_tips') + } + }, + ...useCustomParams({ + model, + field: 'localParams', + isSimple: true + }) + ] +} 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 8fc67906775c..b20460c90279 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 @@ -303,6 +303,13 @@ export function formatParams(data: INodeData): { taskParams.stepsDefineJson = data.stepsDefineJson } + if (data.taskType === 'EMR_SERVERLESS') { + taskParams.applicationId = data.applicationId + taskParams.executionRoleArn = data.executionRoleArn + taskParams.jobName = data.jobName + taskParams.startJobRunRequestJson = data.startJobRunRequestJson + } + if (data.taskType === 'ZEPPELIN') { taskParams.noteId = data.noteId taskParams.paragraphId = data.paragraphId 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 3db6bb96ea5b..89fa49e17b4a 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 @@ -33,6 +33,7 @@ import { useConditions } from './use-conditions' import { useDataX } from './use-datax' import { useDependent } from './use-dependent' import { useEmr } from './use-emr' +import { useEmrServerless } from './use-emr-serverless' import { useZeppelin } from './use-zeppelin' import { useK8s } from './use-k8s' import { useJupyter } from './use-jupyter' @@ -70,6 +71,7 @@ export default { DATAX: useDataX, DEPENDENT: useDependent, EMR: useEmr, + EMR_SERVERLESS: useEmrServerless, ZEPPELIN: useZeppelin, K8S: useK8s, JUPYTER: useJupyter, diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-emr-serverless.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-emr-serverless.ts new file mode 100644 index 000000000000..1b3408262718 --- /dev/null +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-emr-serverless.ts @@ -0,0 +1,72 @@ +/* + * 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 useEmrServerless({ + projectCode, + from = 0, + readonly, + data +}: { + projectCode: number + from?: number + readonly?: boolean + data?: ITaskData +}) { + const model = reactive({ + name: '', + taskType: 'EMR_SERVERLESS', + flag: 'YES', + description: '', + timeoutFlag: false, + localParams: [], + environmentCode: null, + failRetryInterval: 1, + failRetryTimes: 0, + workerGroup: 'default', + delayTime: 0, + timeout: 30, + applicationId: '', + executionRoleArn: '', + jobName: '', + startJobRunRequestJson: '', + timeoutNotifyStrategy: ['WARN'] + } as INodeData) + + return { + json: [ + Fields.useName(from), + ...Fields.useTaskDefinition({ projectCode, from, readonly, data, model }), + Fields.useRunFlag(), + Fields.useDescription(), + Fields.useTaskPriority(), + Fields.useWorkerGroup(projectCode), + Fields.useEnvironmentName(model, !data?.id), + ...Fields.useTaskGroup(model, projectCode), + ...Fields.useFailed(), + Fields.useDelayTime(model), + ...Fields.useTimeoutAlarm(model), + ...Fields.useEmrServerless(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 ce0db268f4f8..d0eb36b277a8 100644 --- a/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts +++ b/dolphinscheduler-ui/src/views/projects/task/constants/task-type.ts @@ -32,6 +32,7 @@ export type TaskType = | 'SWITCH' | 'SEATUNNEL' | 'EMR' + | 'EMR_SERVERLESS' | 'ZEPPELIN' | 'K8S' | 'JUPYTER' @@ -114,6 +115,10 @@ export const TASK_TYPES_MAP = { alias: 'AmazonEMR', helperLinkDisable: true }, + EMR_SERVERLESS: { + alias: 'AmazonEMRServerless', + helperLinkDisable: true + }, ZEPPELIN: { alias: 'ZEPPELIN', helperLinkDisable: true From db7f4c76321cef035fefd10647fd0e06fee78441 Mon Sep 17 00:00:00 2001 From: norrishuang <12380647@qq.com> Date: Sat, 14 Mar 2026 08:37:55 +0000 Subject: [PATCH 02/10] test: add unit tests for EMR Serverless task plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 11 test cases covering: - Submit → track → success/failed/cancelled lifecycle - Full state transition (SUBMITTED→PENDING→SCHEDULED→RUNNING→SUCCESS) - Submit error handling (SDK exception) - GetJobRun returns null - Cancel application (with and without jobRunId) - Failover recovery via appIds - Parameter validation (checkParameters) - Invalid JSON handling --- .../emrserverless/EmrServerlessTaskTest.java | 288 ++++++++++++++++++ .../emrserverless/StartJobRunRequest.json | 16 + 2 files changed, 304 insertions(+) create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/test/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskTest.java create mode 100644 dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/test/resources/org/apache/dolphinscheduler/plugin/task/emrserverless/StartJobRunRequest.json diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/test/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskTest.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/test/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskTest.java new file mode 100644 index 000000000000..eee1b77c13e6 --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/test/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTaskTest.java @@ -0,0 +1,288 @@ +/* + * 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.emrserverless; + +import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.EXIT_CODE_FAILURE; +import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.EXIT_CODE_KILL; +import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.EXIT_CODE_SUCCESS; +import static org.mockito.ArgumentMatchers.any; + +import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.plugin.task.api.TaskCallBack; +import org.apache.dolphinscheduler.plugin.task.api.TaskException; +import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; +import org.apache.dolphinscheduler.plugin.task.api.model.ApplicationInfo; + +import org.apache.commons.io.IOUtils; + +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +import com.amazonaws.services.emrserverless.AWSEMRServerless; +import com.amazonaws.services.emrserverless.model.AWSEMRServerlessException; +import com.amazonaws.services.emrserverless.model.CancelJobRunResult; +import com.amazonaws.services.emrserverless.model.GetJobRunResult; +import com.amazonaws.services.emrserverless.model.JobRun; +import com.amazonaws.services.emrserverless.model.StartJobRunResult; + +@ExtendWith(MockitoExtension.class) +public class EmrServerlessTaskTest { + + private static final String APPLICATION_ID = "00abcdefgh123456"; + private static final String JOB_RUN_ID = "00abcdefgh123456-jobrun-001"; + private static final String EXECUTION_ROLE_ARN = "arn:aws:iam::123456789012:role/EMRServerlessRole"; + + private EmrServerlessTask emrServerlessTask; + private AWSEMRServerless emrServerlessClient; + + private final TaskCallBack taskCallBack = new TaskCallBack() { + + @Override + public void updateRemoteApplicationInfo(int taskInstanceId, ApplicationInfo applicationInfo) { + } + + @Override + public void updateTaskInstanceInfo(int taskInstanceId) { + } + }; + + @BeforeEach + public void before() throws Exception { + String taskParams = buildEmrServerlessTaskParameters(); + TaskExecutionContext taskExecutionContext = Mockito.mock(TaskExecutionContext.class); + Mockito.when(taskExecutionContext.getTaskParams()).thenReturn(taskParams); + Mockito.lenient().when(taskExecutionContext.getTaskName()).thenReturn("test-emr-serverless-task"); + Mockito.lenient().when(taskExecutionContext.getTaskInstanceId()).thenReturn(1); + + emrServerlessTask = Mockito.spy(new EmrServerlessTask(taskExecutionContext)); + + // mock emrServerlessClient + emrServerlessClient = Mockito.mock(AWSEMRServerless.class); + + // mock startJobRun + StartJobRunResult startJobRunResult = Mockito.mock(StartJobRunResult.class); + Mockito.lenient().when(emrServerlessClient.startJobRun(any())).thenReturn(startJobRunResult); + Mockito.lenient().when(startJobRunResult.getJobRunId()).thenReturn(JOB_RUN_ID); + + // inject mock client + Mockito.doReturn(emrServerlessClient).when(emrServerlessTask).createEmrServerlessClient(); + + emrServerlessTask.init(); + } + + @Test + public void testHandleSuccess() throws Exception { + // Job goes: SUBMITTED -> RUNNING -> SUCCESS + mockJobRunStates("SUBMITTED", "RUNNING", "SUCCESS"); + + emrServerlessTask.handle(taskCallBack); + Assertions.assertEquals(EXIT_CODE_SUCCESS, emrServerlessTask.getExitStatusCode()); + } + + @Test + public void testHandleFailed() throws Exception { + // Job goes: SUBMITTED -> RUNNING -> FAILED + mockJobRunStates("SUBMITTED", "RUNNING", "FAILED"); + + emrServerlessTask.handle(taskCallBack); + Assertions.assertEquals(EXIT_CODE_FAILURE, emrServerlessTask.getExitStatusCode()); + } + + @Test + public void testHandleCancelled() throws Exception { + // Job goes: SUBMITTED -> RUNNING -> CANCELLED + mockJobRunStates("SUBMITTED", "RUNNING", "CANCELLED"); + + emrServerlessTask.handle(taskCallBack); + Assertions.assertEquals(EXIT_CODE_KILL, emrServerlessTask.getExitStatusCode()); + } + + @Test + public void testHandleFullLifecycle() throws Exception { + // Job goes through all intermediate states: SUBMITTED -> PENDING -> SCHEDULED -> RUNNING -> SUCCESS + mockJobRunStates("SUBMITTED", "PENDING", "SCHEDULED", "RUNNING", "SUCCESS"); + + emrServerlessTask.handle(taskCallBack); + Assertions.assertEquals(EXIT_CODE_SUCCESS, emrServerlessTask.getExitStatusCode()); + } + + @Test + public void testSubmitError() throws Exception { + Mockito.when(emrServerlessClient.startJobRun(any())) + .thenThrow(new AWSEMRServerlessException("Access denied")); + + Assertions.assertThrows(TaskException.class, () -> { + emrServerlessTask.handle(taskCallBack); + }); + } + + @Test + public void testGetJobRunReturnsNull() throws Exception { + // First call for submit (need a valid startJobRun response) + StartJobRunResult startResult = Mockito.mock(StartJobRunResult.class); + Mockito.when(emrServerlessClient.startJobRun(any())).thenReturn(startResult); + Mockito.when(startResult.getJobRunId()).thenReturn(JOB_RUN_ID); + + // getJobRun returns null + Mockito.when(emrServerlessClient.getJobRun(any())).thenReturn(null); + + emrServerlessTask.handle(taskCallBack); + Assertions.assertEquals(EXIT_CODE_FAILURE, emrServerlessTask.getExitStatusCode()); + } + + @Test + public void testCancelApplication() throws Exception { + // Submit first so we have a jobRunId + mockJobRunStates("SUBMITTED", "RUNNING", "SUCCESS"); + emrServerlessTask.handle(taskCallBack); + + // Now test cancel + CancelJobRunResult cancelResult = Mockito.mock(CancelJobRunResult.class); + Mockito.when(emrServerlessClient.cancelJobRun(any())).thenReturn(cancelResult); + emrServerlessTask.cancelApplication(); + + Mockito.verify(emrServerlessClient).cancelJobRun(any()); + } + + @Test + public void testCancelWithEmptyJobRunId() throws Exception { + // Don't submit, so jobRunId is empty — cancel should be a no-op + emrServerlessTask.cancelApplication(); + Mockito.verify(emrServerlessClient, Mockito.never()).cancelJobRun(any()); + } + + @Test + public void testFailoverRecovery() throws Exception { + // Simulate failover: submit the job first + mockJobRunStates("SUBMITTED", "RUNNING", "SUCCESS"); + emrServerlessTask.handle(taskCallBack); + + // Now create a new task instance simulating failover + String taskParams = buildEmrServerlessTaskParameters(); + TaskExecutionContext failoverContext = Mockito.mock(TaskExecutionContext.class); + Mockito.when(failoverContext.getTaskParams()).thenReturn(taskParams); + Mockito.lenient().when(failoverContext.getTaskName()).thenReturn("test-emr-serverless-failover"); + Mockito.lenient().when(failoverContext.getTaskInstanceId()).thenReturn(2); + // Simulate that appIds was persisted from previous run + Mockito.when(failoverContext.getAppIds()).thenReturn(APPLICATION_ID + ":" + JOB_RUN_ID); + + EmrServerlessTask failoverTask = Mockito.spy(new EmrServerlessTask(failoverContext)); + Mockito.doReturn(emrServerlessClient).when(failoverTask).createEmrServerlessClient(); + + // Reset getJobRun mock for the recovery path — job already completed + mockJobRunStates("SUCCESS"); + + failoverTask.init(); + failoverTask.handle(taskCallBack); + + // Should recover and succeed without calling startJobRun again + Assertions.assertEquals(EXIT_CODE_SUCCESS, failoverTask.getExitStatusCode()); + } + + @Test + public void testParametersCheck() { + EmrServerlessParameters params = new EmrServerlessParameters(); + + // All empty — should fail + Assertions.assertFalse(params.checkParameters()); + + // Only applicationId — should fail + params.setApplicationId(APPLICATION_ID); + Assertions.assertFalse(params.checkParameters()); + + // applicationId + executionRoleArn — should fail (no JSON) + params.setExecutionRoleArn(EXECUTION_ROLE_ARN); + Assertions.assertFalse(params.checkParameters()); + + // All three — should pass + params.setStartJobRunRequestJson("{}"); + Assertions.assertTrue(params.checkParameters()); + } + + @Test + public void testInvalidJson() throws Exception { + // Build params with invalid JSON + EmrServerlessParameters params = new EmrServerlessParameters(); + params.setApplicationId(APPLICATION_ID); + params.setExecutionRoleArn(EXECUTION_ROLE_ARN); + params.setStartJobRunRequestJson("{invalid json!!!}"); + + TaskExecutionContext ctx = Mockito.mock(TaskExecutionContext.class); + Mockito.when(ctx.getTaskParams()).thenReturn(JSONUtils.toJsonString(params)); + Mockito.lenient().when(ctx.getTaskName()).thenReturn("test-bad-json"); + Mockito.lenient().when(ctx.getTaskInstanceId()).thenReturn(99); + + EmrServerlessTask badJsonTask = Mockito.spy(new EmrServerlessTask(ctx)); + Mockito.doReturn(emrServerlessClient).when(badJsonTask).createEmrServerlessClient(); + + badJsonTask.init(); + Assertions.assertThrows(TaskException.class, () -> { + badJsonTask.handle(taskCallBack); + }); + } + + // --- Helper methods --- + + private void mockJobRunStates(String... states) { + if (states.length == 0) { + return; + } + + GetJobRunResult[] results = new GetJobRunResult[states.length]; + for (int i = 0; i < states.length; i++) { + GetJobRunResult result = Mockito.mock(GetJobRunResult.class); + JobRun jobRun = Mockito.mock(JobRun.class); + Mockito.when(result.getJobRun()).thenReturn(jobRun); + Mockito.when(jobRun.getState()).thenReturn(states[i]); + results[i] = result; + } + + if (results.length == 1) { + Mockito.when(emrServerlessClient.getJobRun(any())).thenReturn(results[0]); + } else { + GetJobRunResult first = results[0]; + GetJobRunResult[] rest = new GetJobRunResult[results.length - 1]; + System.arraycopy(results, 1, rest, 0, rest.length); + Mockito.when(emrServerlessClient.getJobRun(any())).thenReturn(first, rest); + } + } + + private String buildEmrServerlessTaskParameters() { + EmrServerlessParameters params = new EmrServerlessParameters(); + params.setApplicationId(APPLICATION_ID); + params.setExecutionRoleArn(EXECUTION_ROLE_ARN); + + String startJobRunRequestJson; + try (InputStream is = this.getClass().getResourceAsStream("StartJobRunRequest.json")) { + assert is != null; + startJobRunRequestJson = IOUtils.toString(is, StandardCharsets.UTF_8); + } catch (Exception e) { + throw new RuntimeException(e); + } + params.setStartJobRunRequestJson(startJobRunRequestJson); + + return JSONUtils.toJsonString(params); + } +} diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/test/resources/org/apache/dolphinscheduler/plugin/task/emrserverless/StartJobRunRequest.json b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/test/resources/org/apache/dolphinscheduler/plugin/task/emrserverless/StartJobRunRequest.json new file mode 100644 index 000000000000..36386900a83a --- /dev/null +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/test/resources/org/apache/dolphinscheduler/plugin/task/emrserverless/StartJobRunRequest.json @@ -0,0 +1,16 @@ +{ + "JobDriver": { + "SparkSubmit": { + "EntryPoint": "s3://my-bucket/scripts/spark-etl.py", + "EntryPointArguments": ["--input", "s3://data/raw", "--output", "s3://data/processed"], + "SparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=16g --conf spark.executor.instances=10" + } + }, + "ConfigurationOverrides": { + "MonitoringConfiguration": { + "S3MonitoringConfiguration": { + "LogUri": "s3://my-bucket/emr-serverless-logs/" + } + } + } +} From 1bd61c7981b064c9335fe6edcc6404860d2ad10c Mon Sep 17 00:00:00 2001 From: norrishuang <12380647@qq.com> Date: Sat, 14 Mar 2026 10:41:44 +0000 Subject: [PATCH 03/10] fix: add shade plugin and TS type defs for EMR Serverless task - Add maven-shade-plugin to emr-serverless pom.xml so shade jar is included in dist assembly - Add applicationId, executionRoleArn, startJobRunRequestJson fields to ITaskParams in types.ts to fix TypeScript build --- .../pom.xml | 17 +++++++++++++++++ .../projects/task/components/node/types.ts | 3 +++ 2 files changed, 20 insertions(+) diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/pom.xml b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/pom.xml index e1e046eda113..81a98a92cf25 100644 --- a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/pom.xml +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/pom.xml @@ -57,4 +57,21 @@
+ + + + org.apache.maven.plugins + maven-shade-plugin + + + + shade + + package + + + + + + diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts index 76dcde23ee2d..484f288ffa5e 100644 --- a/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/types.ts @@ -347,6 +347,9 @@ interface ITaskParams { ruleInputParameter?: IRuleParameters jobFlowDefineJson?: string stepsDefineJson?: string + applicationId?: string + executionRoleArn?: string + startJobRunRequestJson?: string zeppelinNoteId?: string zeppelinParagraphId?: string zeppelinRestEndpoint?: string From f7293cf2b44c569bc56bc48fbad01899e007bb5f Mon Sep 17 00:00:00 2001 From: norrishuang <12380647@qq.com> Date: Sat, 14 Mar 2026 14:11:32 +0000 Subject: [PATCH 04/10] fix: add EMR_SERVERLESS to store/project/task-type.ts TASK_TYPES_MAP The use-task.ts imports TASK_TYPES_MAP from store/project/task-type.ts (not constants/task-type.ts), so EMR_SERVERLESS must be defined there too. Missing entry caused 'Cannot read properties of undefined (reading taskExecuteType)' error when dragging the node onto canvas. --- dolphinscheduler-ui/src/store/project/task-type.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dolphinscheduler-ui/src/store/project/task-type.ts b/dolphinscheduler-ui/src/store/project/task-type.ts index b6de8e6e5a23..597340750ae3 100644 --- a/dolphinscheduler-ui/src/store/project/task-type.ts +++ b/dolphinscheduler-ui/src/store/project/task-type.ts @@ -81,6 +81,10 @@ export const TASK_TYPES_MAP = { alias: 'AmazonEMR', helperLinkDisable: true }, + EMR_SERVERLESS: { + alias: 'AmazonEMRServerless', + helperLinkDisable: true + }, ZEPPELIN: { alias: 'ZEPPELIN', helperLinkDisable: true From c39c06267ee4ba0e98656e388f2582e31fa23d39 Mon Sep 17 00:00:00 2001 From: norrishuang <12380647@qq.com> Date: Sat, 14 Mar 2026 14:22:55 +0000 Subject: [PATCH 05/10] fix: ignore endpoint config for EMR Serverless client EMR Serverless has no local emulator, so the endpoint from aws.emr.* config (which often points to a local MinIO/S3 mock like localhost:9000) should not be used. Always use the standard AWS endpoint resolved by region. Also updated aws.yaml on deploy server to use InstanceProfileCredentialsProvider. --- .../plugin/task/emrserverless/EmrServerlessTask.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTask.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTask.java index e34c3c0287c7..3ed3862823de 100644 --- a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTask.java +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr-serverless/src/main/java/org/apache/dolphinscheduler/plugin/task/emrserverless/EmrServerlessTask.java @@ -304,12 +304,11 @@ protected AWSEMRServerless createEmrServerlessClient() { builder.withCredentials(credentialsProvider); String region = awsProperties.get(AwsConfigurationKeys.AWS_REGION); - String endpoint = awsProperties.get(AwsConfigurationKeys.AWS_ENDPOINT); - if (StringUtils.isNotEmpty(endpoint) && StringUtils.isNotEmpty(region)) { - builder.withEndpointConfiguration( - new com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration(endpoint, region)); - } else if (StringUtils.isNotEmpty(region)) { + // Note: unlike S3, EMR Serverless has no local emulator, so we ignore + // the endpoint configuration (which may point to a local MinIO/S3 mock) + // and always use the standard AWS EMR Serverless endpoint resolved by region. + if (StringUtils.isNotEmpty(region)) { builder.withRegion(region); } From 155fea647b2c8ad00d9c62919f857044786bf578 Mon Sep 17 00:00:00 2001 From: norrishuang <12380647@qq.com> Date: Sat, 14 Mar 2026 14:48:45 +0000 Subject: [PATCH 06/10] docs: add EMR Serverless task icon and documentation (zh/en) - Copy EMR icon for EMR_SERVERLESS task type (emr_serverless.png, emr_serverless_hover.png) - Add Chinese doc: docs/docs/zh/guide/task/emr-serverless.md - Add English doc: docs/docs/en/guide/task/emr-serverless.md - Register docs in sidebar config (docsdev.js) - Docs include: overview, task parameters, Spark/Hive examples, AWS auth config, job state transitions, and notices - Screenshot placeholders marked with TODO comments --- docs/configs/docsdev.js | 8 + docs/docs/en/guide/task/emr-serverless.md | 150 ++++++++++++++++++ docs/docs/zh/guide/task/emr-serverless.md | 150 ++++++++++++++++++ .../images/task-icons/emr_serverless.png | Bin 0 -> 1015 bytes .../task-icons/emr_serverless_hover.png | Bin 0 -> 1280 bytes 5 files changed, 308 insertions(+) create mode 100644 docs/docs/en/guide/task/emr-serverless.md create mode 100644 docs/docs/zh/guide/task/emr-serverless.md create mode 100644 dolphinscheduler-ui/public/images/task-icons/emr_serverless.png create mode 100644 dolphinscheduler-ui/public/images/task-icons/emr_serverless_hover.png diff --git a/docs/configs/docsdev.js b/docs/configs/docsdev.js index 541f314645e0..2bff8b5fef99 100644 --- a/docs/configs/docsdev.js +++ b/docs/configs/docsdev.js @@ -153,6 +153,10 @@ export default { title: 'Amazon EMR', link: '/en-us/docs/dev/user_doc/guide/task/emr.html', }, + { + title: 'Amazon EMR Serverless', + link: '/en-us/docs/dev/user_doc/guide/task/emr-serverless.html', + }, { title: 'Apache Zeppelin', link: '/en-us/docs/dev/user_doc/guide/task/zeppelin.html', @@ -881,6 +885,10 @@ export default { title: 'Amazon EMR', link: '/zh-cn/docs/dev/user_doc/guide/task/emr.html', }, + { + title: 'Amazon EMR Serverless', + link: '/zh-cn/docs/dev/user_doc/guide/task/emr-serverless.html', + }, { title: 'Apache Zeppelin', link: '/zh-cn/docs/dev/user_doc/guide/task/zeppelin.html', diff --git a/docs/docs/en/guide/task/emr-serverless.md b/docs/docs/en/guide/task/emr-serverless.md new file mode 100644 index 000000000000..c0d698c742b0 --- /dev/null +++ b/docs/docs/en/guide/task/emr-serverless.md @@ -0,0 +1,150 @@ +# Amazon EMR Serverless + +## Overview + +Amazon EMR Serverless task type, for submitting and monitoring job runs on [Amazon EMR Serverless](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/emr-serverless.html) applications. +Unlike traditional EMR on EC2, EMR Serverless requires no cluster infrastructure management and automatically scales compute resources on demand, suitable for Spark and Hive workloads. + +Using [aws-java-sdk](https://aws.amazon.com/cn/sdk-for-java/) in the background code, to transfer JSON parameters to a [StartJobRunRequest](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/emrserverless/model/StartJobRunRequest.html) object +and submit it to AWS via the [StartJobRun API](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html), then poll job status via the [GetJobRun API](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_GetJobRun.html) until completion. + +## Create Task + +- Click `Project Management -> Project Name -> Workflow Definition`, click the `Create Workflow` button to enter the DAG editing page. +- Drag `AmazonEMRServerless` task from the toolbar to the artboard to complete the creation. + + + + +## Task Parameters + +[//]: # (TODO: use the commented anchor below once our website template supports this syntax) +[//]: # (- Please refer to [DolphinScheduler Task Parameters Appendix](appendix.md#default-task-parameters) `Default Task Parameters` section for default parameters.) + +- Please refer to [DolphinScheduler Task Parameters Appendix](appendix.md) `Default Task Parameters` section for default parameters. + +| **Parameter** | **Description** | +|-------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Application Id | EMR Serverless application ID (e.g. `00fkht2eodujab09`), obtainable from the [EMR Serverless Console](https://console.aws.amazon.com/emr/home#/serverless) | +| Execution Role Arn | ARN of the IAM role for job execution (e.g. `arn:aws:iam::123456789012:role/EMRServerlessRole`), this role needs permissions to access S3, Glue, and other services | +| Job Name | Job name (optional), used to identify the job in the EMR Serverless console | +| StartJobRunRequest JSON | JSON corresponding to the `JobDriver` and `ConfigurationOverrides` portions of the [StartJobRunRequest](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/emrserverless/model/StartJobRunRequest.html), see examples below. **Note**: `ApplicationId` and `ExecutionRoleArn` do not need to be included in the JSON as they are automatically injected from the form parameters above | + + + + +## Task Example + +### Submit a Spark Job + +This example shows how to create an `EMR_SERVERLESS` task node to submit a Spark job to an EMR Serverless application. + + + + +StartJobRunRequest JSON example (Spark): + +```json +{ + "JobDriver": { + "SparkSubmit": { + "EntryPoint": "s3://my-bucket/scripts/my-spark-job.jar", + "EntryPointArguments": [ + "s3://my-bucket/input/", + "s3://my-bucket/output/" + ], + "SparkSubmitParameters": "--class com.example.MySparkApp --conf spark.executor.cores=4 --conf spark.executor.memory=8g --conf spark.executor.instances=10" + } + }, + "ConfigurationOverrides": { + "MonitoringConfiguration": { + "S3MonitoringConfiguration": { + "LogUri": "s3://my-bucket/emr-serverless-logs/" + } + } + } +} +``` + +### Submit a Hive Job + +This example shows how to create an `EMR_SERVERLESS` task node to submit a Hive query job. + +StartJobRunRequest JSON example (Hive): + +```json +{ + "JobDriver": { + "HiveSQL": { + "Query": "s3://my-bucket/scripts/my-hive-query.sql", + "Parameters": "--hiveconf hive.exec.dynamic.partition=true --hiveconf hive.exec.dynamic.partition.mode=nonstrict" + } + }, + "ConfigurationOverrides": { + "MonitoringConfiguration": { + "S3MonitoringConfiguration": { + "LogUri": "s3://my-bucket/emr-serverless-logs/" + } + }, + "ApplicationConfiguration": [ + { + "Classification": "hive-site", + "Properties": { + "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory" + } + } + ] + } +} +``` + +## AWS Authentication Configuration + +The EMR Serverless task reads AWS credentials from the DolphinScheduler `aws.yaml` configuration file, under the `aws.emr` section at `conf/aws.yaml`. + +### Using IAM Role (Recommended) + +If the DolphinScheduler Worker node runs on an EC2 instance with an attached IAM Role: + +```yaml +aws: + emr: + credentials.provider.type: InstanceProfileCredentialsProvider + region: us-east-1 +``` + +### Using Access Key + +If you need to authenticate using AK/SK: + +```yaml +aws: + emr: + credentials.provider.type: AWSStaticCredentialsProvider + access.key.id: your-access-key-id + access.key.secret: your-secret-access-key + region: us-east-1 +``` + +> **Note**: The `aws.emr` section configuration is shared by both EMR on EC2 and EMR Serverless task types. + +## Job State Transitions + +After an EMR Serverless job is submitted, DolphinScheduler polls the job status every 10 seconds: + +``` +SUBMITTED → PENDING → SCHEDULED → RUNNING → SUCCESS + → FAILED + → CANCELLED +``` + +- When a job reaches `SUCCESS` state, the task is marked as successful +- When a job reaches `FAILED` or `CANCELLED` state, the task is marked as failed +- If a DolphinScheduler task is killed, it automatically calls the [CancelJobRun API](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_CancelJobRun.html) to cancel the running job + +## Notice + +- The **Application Id** must correspond to a pre-existing EMR Serverless application (created via the AWS Console or API) in `STARTED` or `CREATED` state +- The **Execution Role** requires the following minimum permissions: `emr-serverless:StartJobRun`, `emr-serverless:GetJobRun`, `emr-serverless:CancelJobRun`, plus S3, Glue and other data access permissions required by the job +- `StartJobRunRequest JSON` should NOT include `ApplicationId` or `ExecutionRoleArn` fields — they are automatically injected from the form parameters +- EMR Serverless task supports failover: when a Worker node fails, a new Worker can recover tracking of running jobs through `appIds` (the `jobRunId`) diff --git a/docs/docs/zh/guide/task/emr-serverless.md b/docs/docs/zh/guide/task/emr-serverless.md new file mode 100644 index 000000000000..d1deaa6e176c --- /dev/null +++ b/docs/docs/zh/guide/task/emr-serverless.md @@ -0,0 +1,150 @@ +# Amazon EMR Serverless + +## 综述 + +Amazon EMR Serverless 任务类型,用于向 [Amazon EMR Serverless](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/emr-serverless.html) 应用程序提交并监控作业运行。 +与传统的 EMR on EC2 不同,EMR Serverless 无需管理集群基础设施,按需自动扩缩容计算资源,适用于 Spark 和 Hive 工作负载。 + +后台使用 [aws-java-sdk](https://aws.amazon.com/cn/sdk-for-java/) 将 JSON 参数转换为 [StartJobRunRequest](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/emrserverless/model/StartJobRunRequest.html) 对象, +通过 [StartJobRun API](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html) 提交到 AWS,并通过 [GetJobRun API](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_GetJobRun.html) 轮询作业状态直到完成。 + +## 创建任务 + +- 点击 `项目管理 -> 项目名称 -> 工作流定义`,点击 `创建工作流` 按钮进入 DAG 编辑页面。 +- 从工具栏中拖拽 `AmazonEMRServerless` 任务到画布中完成创建。 + + + + +## 任务参数 + +[//]: # (TODO: use the commented anchor below once our website template supports this syntax) +[//]: # (- 默认参数说明请参考[DolphinScheduler任务参数附录](appendix.md#默认任务参数)`默认任务参数`一栏。) + +- 默认参数说明请参考[DolphinScheduler任务参数附录](appendix.md)`默认任务参数`一栏。 + +| **任务参数** | **描述** | +|--------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Application Id | EMR Serverless 应用程序 ID(格式如 `00fkht2eodujab09`),可在 [EMR Serverless 控制台](https://console.aws.amazon.com/emr/home#/serverless) 获取 | +| Execution Role Arn | 作业执行 IAM 角色的 ARN(格式如 `arn:aws:iam::123456789012:role/EMRServerlessRole`),该角色需要有访问 S3、Glue 等服务的权限 | +| Job Name | 作业名称(可选),用于在 EMR Serverless 控制台中标识作业 | +| StartJobRunRequest JSON | [StartJobRunRequest](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/emrserverless/model/StartJobRunRequest.html) 中 `JobDriver` 和 `ConfigurationOverrides` 部分对应的 JSON,详细定义见下方示例。**注意**:`ApplicationId` 和 `ExecutionRoleArn` 无需在 JSON 中重复填写,系统会自动从上方参数注入 | + + + + +## 任务样例 + +### 提交 Spark 作业 + +该样例展示了如何创建 `EMR_SERVERLESS` 任务节点来提交一个 Spark 作业到 EMR Serverless 应用程序。 + + + + +StartJobRunRequest JSON 参数样例(Spark): + +```json +{ + "JobDriver": { + "SparkSubmit": { + "EntryPoint": "s3://my-bucket/scripts/my-spark-job.jar", + "EntryPointArguments": [ + "s3://my-bucket/input/", + "s3://my-bucket/output/" + ], + "SparkSubmitParameters": "--class com.example.MySparkApp --conf spark.executor.cores=4 --conf spark.executor.memory=8g --conf spark.executor.instances=10" + } + }, + "ConfigurationOverrides": { + "MonitoringConfiguration": { + "S3MonitoringConfiguration": { + "LogUri": "s3://my-bucket/emr-serverless-logs/" + } + } + } +} +``` + +### 提交 Hive 作业 + +该样例展示了如何创建 `EMR_SERVERLESS` 任务节点来提交一个 Hive 查询作业。 + +StartJobRunRequest JSON 参数样例(Hive): + +```json +{ + "JobDriver": { + "HiveSQL": { + "Query": "s3://my-bucket/scripts/my-hive-query.sql", + "Parameters": "--hiveconf hive.exec.dynamic.partition=true --hiveconf hive.exec.dynamic.partition.mode=nonstrict" + } + }, + "ConfigurationOverrides": { + "MonitoringConfiguration": { + "S3MonitoringConfiguration": { + "LogUri": "s3://my-bucket/emr-serverless-logs/" + } + }, + "ApplicationConfiguration": [ + { + "Classification": "hive-site", + "Properties": { + "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory" + } + } + ] + } +} +``` + +## AWS 认证配置 + +EMR Serverless 任务通过 DolphinScheduler 的 `aws.yaml` 配置文件读取 AWS 认证信息,配置路径为 `conf/aws.yaml` 中的 `aws.emr` 段。 + +### 使用 IAM Role(推荐) + +如果 DolphinScheduler Worker 节点运行在 EC2 实例上并已绑定 IAM Role,配置如下: + +```yaml +aws: + emr: + credentials.provider.type: InstanceProfileCredentialsProvider + region: us-east-1 +``` + +### 使用 Access Key + +如果需要使用 AK/SK 方式认证: + +```yaml +aws: + emr: + credentials.provider.type: AWSStaticCredentialsProvider + access.key.id: your-access-key-id + access.key.secret: your-secret-access-key + region: us-east-1 +``` + +> **注意**:`aws.emr` 段的配置同时被 EMR on EC2 和 EMR Serverless 任务类型共享。 + +## 作业状态流转 + +EMR Serverless 作业提交后,DolphinScheduler 会每 10 秒轮询一次作业状态: + +``` +SUBMITTED → PENDING → SCHEDULED → RUNNING → SUCCESS + → FAILED + → CANCELLED +``` + +- 作业进入 `SUCCESS` 状态时,任务标记为成功 +- 作业进入 `FAILED` 或 `CANCELLED` 状态时,任务标记为失败 +- 如果 DolphinScheduler 任务被终止,会自动调用 [CancelJobRun API](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_CancelJobRun.html) 取消正在运行的作业 + +## 注意事项 + +- **Application Id** 对应的 EMR Serverless 应用程序需要预先在 AWS 控制台或通过 API 创建,并确保处于 `STARTED` 或 `CREATED` 状态 +- **Execution Role** 需要有以下最小权限:`emr-serverless:StartJobRun`、`emr-serverless:GetJobRun`、`emr-serverless:CancelJobRun`,以及作业所需的 S3、Glue 等数据访问权限 +- `StartJobRunRequest JSON` 中无需填写 `ApplicationId` 和 `ExecutionRoleArn` 字段,系统会自动从表单参数注入 +- EMR Serverless 任务支持故障转移(Failover):当 Worker 节点发生故障时,新的 Worker 可以通过 `appIds`(即 `jobRunId`)恢复对正在运行作业的跟踪 diff --git a/dolphinscheduler-ui/public/images/task-icons/emr_serverless.png b/dolphinscheduler-ui/public/images/task-icons/emr_serverless.png new file mode 100644 index 0000000000000000000000000000000000000000..40fca7c961c8867bc1819e71cc6ed100cfa0164c GIT binary patch literal 1015 zcmVG2VWe^CF6fu*EqPPF^;)cGSwH=)!!3X~AocH5-e(&d=vv1!PZDeHR z{P6Jb67(CoCDxbRhK7bN0OU2q1TCWOrr3VR4Ks8N!QW~CiCO~SJ+Xh$4M5isY+eH( zpLPb2mIcn=YXsD*&luc8(Z6mR92~p|XRkB@Y*!xuctebr*VgvXI}L}$)<@{B7=M!i z=n5JxXgJtuE&p={(IBnSsZ>gfJXxbkjSi(!@xibRTw=LSZ5@n)kB*MAv9U2WF*(VS zsT9}5!~_>TPbQPRp4#bz%@39VAY}rkrl!~=V5kiD8jJPyvF@%e7H)56LBF2`8yfg~ zUvDoPOe8oQwa>uQa~|N_VCb060>BA%h{s~AI}%~xjt&-TYGMr@5A!&k%u!dzY-TgF znoP__k|h4F$TD-QD)W22y#3?0HWmSJZ#2pWv>updcYJ(2KiI&)K)Q1cfE;^WF6OXW zHvrfz7N#P&6XhSw8GGnaX67=@N9=WwYI`SCj`XMX@Rti&|$g-RF{|t0YO1 zPP*Oh1JqCSxBE>oo68@$TxVuxW(++&J%*Z!3jRy)9z`)=Mhq6HrLoa4H#cX%5*UMV_o_frSEr{9q_2IJ(2=;?)RRh;pAwEwGkgurM%) z?kc*YG=dhQJuto61JkQLFumHXU=9b*l_=>mR#p8UU=CR}6Bv@k6(oj>r39nYN95UH zNKsDEuUAzaa&2uXz{1c`kt3%8a6d9oEB-4#rBbOVvW_`q5gWn!`*||B1+ZU`AKw#4 z#JB|;C3*CVOx8*1^m;I)E4smu_jdt^`z(qPV7;n(0QSAf=VLRov(KW@s2|@0Kk2)m z0I&!Ka$NLVG()0zDijKxqi46Gl+*HN_E`?F&UidtCi>Y?1LQH}`%4;NKcGO#fkeYn l)&lI?8W;f`6x(da{sNf}2*g7aBY^+_002ovPDHLkV1jsP)3g8p literal 0 HcmV?d00001 diff --git a/dolphinscheduler-ui/public/images/task-icons/emr_serverless_hover.png b/dolphinscheduler-ui/public/images/task-icons/emr_serverless_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..59acf7a114d1aad26aa8225aa64aeeccf5ce358d GIT binary patch literal 1280 zcmV+b1^@bqP)>1r;03aKF(9SF42hl#c$Z$4B7?yem>oE(Td1(K1$z1ONA?J zUapGDJ>j(BAH`Fs@C(D4%q(!J3h^9?!@ifi}x}m>W0T`3Jw23WjFiAJ` zH!A@X={=LQiLL(*OyhzmHf{*d?||1Y_Cl(8918Nk^t7OskBAj6%f)|AG3*D2^@3|0g4R+!^ zvqN`N7BQ zVe?x}5Ssf1UhtQ&zo;7ye%gz_1pSa)H3V|RN~><&AGR&0*|_nT-4mp+_K*zgO(LuP zm84qkku>WcbAUSTVZN7II}dF7lO&t(k#y^C4=Nk_LvpTkBiI{zzQ;nFd`qQzfV^Gv z5J~F_BobpdNixS0xlK%tHWc6tWRsgB6&8*#>35pf#a=h-2R%ySZ-Cf`+CW-nYCeNMiEXi_AXvLR@ z$|Tca{y$tX=o4J$sCW&yWPC)ErYglUi7=4iqs%-txQeT_48fEr~DD&2aHeG~G9{V1yN#M7s* qZ7J-0gf&jXz7myt_S2^ Date: Sat, 14 Mar 2026 15:25:51 +0000 Subject: [PATCH 07/10] docs: add EMR Serverless screenshots --- docs/docs/en/guide/task/emr-serverless.md | 8 +------- docs/docs/zh/guide/task/emr-serverless.md | 9 +++------ docs/img/tasks/demo/emr_serverless_create.png | Bin 0 -> 290612 bytes 3 files changed, 4 insertions(+), 13 deletions(-) create mode 100644 docs/img/tasks/demo/emr_serverless_create.png diff --git a/docs/docs/en/guide/task/emr-serverless.md b/docs/docs/en/guide/task/emr-serverless.md index c0d698c742b0..e72f64d21a55 100644 --- a/docs/docs/en/guide/task/emr-serverless.md +++ b/docs/docs/en/guide/task/emr-serverless.md @@ -13,8 +13,6 @@ and submit it to AWS via the [StartJobRun API](https://docs.aws.amazon.com/emr-s - Click `Project Management -> Project Name -> Workflow Definition`, click the `Create Workflow` button to enter the DAG editing page. - Drag `AmazonEMRServerless` task from the toolbar to the artboard to complete the creation. - - ## Task Parameters @@ -30,8 +28,7 @@ and submit it to AWS via the [StartJobRun API](https://docs.aws.amazon.com/emr-s | Job Name | Job name (optional), used to identify the job in the EMR Serverless console | | StartJobRunRequest JSON | JSON corresponding to the `JobDriver` and `ConfigurationOverrides` portions of the [StartJobRunRequest](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/emrserverless/model/StartJobRunRequest.html), see examples below. **Note**: `ApplicationId` and `ExecutionRoleArn` do not need to be included in the JSON as they are automatically injected from the form parameters above | - - +![RUN_JOB_FLOW](../../../../img/tasks/demo/emr_serverless_create.png) ## Task Example @@ -39,9 +36,6 @@ and submit it to AWS via the [StartJobRun API](https://docs.aws.amazon.com/emr-s This example shows how to create an `EMR_SERVERLESS` task node to submit a Spark job to an EMR Serverless application. - - - StartJobRunRequest JSON example (Spark): ```json diff --git a/docs/docs/zh/guide/task/emr-serverless.md b/docs/docs/zh/guide/task/emr-serverless.md index d1deaa6e176c..acb97b9edb3d 100644 --- a/docs/docs/zh/guide/task/emr-serverless.md +++ b/docs/docs/zh/guide/task/emr-serverless.md @@ -13,8 +13,7 @@ Amazon EMR Serverless 任务类型,用于向 [Amazon EMR Serverless](https://d - 点击 `项目管理 -> 项目名称 -> 工作流定义`,点击 `创建工作流` 按钮进入 DAG 编辑页面。 - 从工具栏中拖拽 `AmazonEMRServerless` 任务到画布中完成创建。 - - + ## 任务参数 @@ -30,8 +29,8 @@ Amazon EMR Serverless 任务类型,用于向 [Amazon EMR Serverless](https://d | Job Name | 作业名称(可选),用于在 EMR Serverless 控制台中标识作业 | | StartJobRunRequest JSON | [StartJobRunRequest](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/emrserverless/model/StartJobRunRequest.html) 中 `JobDriver` 和 `ConfigurationOverrides` 部分对应的 JSON,详细定义见下方示例。**注意**:`ApplicationId` 和 `ExecutionRoleArn` 无需在 JSON 中重复填写,系统会自动从上方参数注入 | - - +![RUN_JOB_FLOW](../../../../img/tasks/demo/emr_serverless_create.png) + ## 任务样例 @@ -39,8 +38,6 @@ Amazon EMR Serverless 任务类型,用于向 [Amazon EMR Serverless](https://d 该样例展示了如何创建 `EMR_SERVERLESS` 任务节点来提交一个 Spark 作业到 EMR Serverless 应用程序。 - - StartJobRunRequest JSON 参数样例(Spark): diff --git a/docs/img/tasks/demo/emr_serverless_create.png b/docs/img/tasks/demo/emr_serverless_create.png new file mode 100644 index 0000000000000000000000000000000000000000..ba13ba153e27aba6dd79a657cdbf63ebb39bbb87 GIT binary patch literal 290612 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 K9}^zFc>8}n;h8A_ literal 0 HcmV?d00001 From 897814751e0afe36de348f85145af2d44819aa37 Mon Sep 17 00:00:00 2001 From: norrishuang <12380647@qq.com> Date: Mon, 16 Mar 2026 03:58:32 +0000 Subject: [PATCH 08/10] fix: add EMR_SERVERLESS to cloud task type config for UI sidebar display --- dolphinscheduler-api/src/main/resources/task-type-config.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/dolphinscheduler-api/src/main/resources/task-type-config.yaml b/dolphinscheduler-api/src/main/resources/task-type-config.yaml index 51bbae7e9abd..e95d4190fc60 100644 --- a/dolphinscheduler-api/src/main/resources/task-type-config.yaml +++ b/dolphinscheduler-api/src/main/resources/task-type-config.yaml @@ -33,6 +33,7 @@ task: - 'REMOTESHELL' cloud: - 'EMR' + - 'EMR_SERVERLESS' - 'K8S' - 'DMS' - 'DATA_FACTORY' From 7c292a1c67f93365ab11b780f33a005e5f636162 Mon Sep 17 00:00:00 2001 From: norrishuang <12380647@qq.com> Date: Mon, 16 Mar 2026 06:22:30 +0000 Subject: [PATCH 09/10] style: fix spotless format issues in emr-serverless docs --- docs/docs/en/guide/task/emr-serverless.md | 14 +++++++------- docs/docs/zh/guide/task/emr-serverless.md | 17 +++++++---------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/docs/docs/en/guide/task/emr-serverless.md b/docs/docs/en/guide/task/emr-serverless.md index e72f64d21a55..b661aac07a95 100644 --- a/docs/docs/en/guide/task/emr-serverless.md +++ b/docs/docs/en/guide/task/emr-serverless.md @@ -13,7 +13,6 @@ and submit it to AWS via the [StartJobRun API](https://docs.aws.amazon.com/emr-s - Click `Project Management -> Project Name -> Workflow Definition`, click the `Create Workflow` button to enter the DAG editing page. - Drag `AmazonEMRServerless` task from the toolbar to the artboard to complete the creation. - ## Task Parameters [//]: # (TODO: use the commented anchor below once our website template supports this syntax) @@ -21,12 +20,12 @@ and submit it to AWS via the [StartJobRun API](https://docs.aws.amazon.com/emr-s - Please refer to [DolphinScheduler Task Parameters Appendix](appendix.md) `Default Task Parameters` section for default parameters. -| **Parameter** | **Description** | -|-------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Application Id | EMR Serverless application ID (e.g. `00fkht2eodujab09`), obtainable from the [EMR Serverless Console](https://console.aws.amazon.com/emr/home#/serverless) | -| Execution Role Arn | ARN of the IAM role for job execution (e.g. `arn:aws:iam::123456789012:role/EMRServerlessRole`), this role needs permissions to access S3, Glue, and other services | -| Job Name | Job name (optional), used to identify the job in the EMR Serverless console | -| StartJobRunRequest JSON | JSON corresponding to the `JobDriver` and `ConfigurationOverrides` portions of the [StartJobRunRequest](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/emrserverless/model/StartJobRunRequest.html), see examples below. **Note**: `ApplicationId` and `ExecutionRoleArn` do not need to be included in the JSON as they are automatically injected from the form parameters above | +| **Parameter** | **Description** | +|-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Application Id | EMR Serverless application ID (e.g. `00fkht2eodujab09`), obtainable from the [EMR Serverless Console](https://console.aws.amazon.com/emr/home#/serverless) | +| Execution Role Arn | ARN of the IAM role for job execution (e.g. `arn:aws:iam::123456789012:role/EMRServerlessRole`), this role needs permissions to access S3, Glue, and other services | +| Job Name | Job name (optional), used to identify the job in the EMR Serverless console | +| StartJobRunRequest JSON | JSON corresponding to the `JobDriver` and `ConfigurationOverrides` portions of the [StartJobRunRequest](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/emrserverless/model/StartJobRunRequest.html), see examples below. **Note**: `ApplicationId` and `ExecutionRoleArn` do not need to be included in the JSON as they are automatically injected from the form parameters above | ![RUN_JOB_FLOW](../../../../img/tasks/demo/emr_serverless_create.png) @@ -142,3 +141,4 @@ SUBMITTED → PENDING → SCHEDULED → RUNNING → SUCCESS - The **Execution Role** requires the following minimum permissions: `emr-serverless:StartJobRun`, `emr-serverless:GetJobRun`, `emr-serverless:CancelJobRun`, plus S3, Glue and other data access permissions required by the job - `StartJobRunRequest JSON` should NOT include `ApplicationId` or `ExecutionRoleArn` fields — they are automatically injected from the form parameters - EMR Serverless task supports failover: when a Worker node fails, a new Worker can recover tracking of running jobs through `appIds` (the `jobRunId`) + diff --git a/docs/docs/zh/guide/task/emr-serverless.md b/docs/docs/zh/guide/task/emr-serverless.md index acb97b9edb3d..92ce54a84ade 100644 --- a/docs/docs/zh/guide/task/emr-serverless.md +++ b/docs/docs/zh/guide/task/emr-serverless.md @@ -13,8 +13,6 @@ Amazon EMR Serverless 任务类型,用于向 [Amazon EMR Serverless](https://d - 点击 `项目管理 -> 项目名称 -> 工作流定义`,点击 `创建工作流` 按钮进入 DAG 编辑页面。 - 从工具栏中拖拽 `AmazonEMRServerless` 任务到画布中完成创建。 - - ## 任务参数 [//]: # (TODO: use the commented anchor below once our website template supports this syntax) @@ -22,23 +20,21 @@ Amazon EMR Serverless 任务类型,用于向 [Amazon EMR Serverless](https://d - 默认参数说明请参考[DolphinScheduler任务参数附录](appendix.md)`默认任务参数`一栏。 -| **任务参数** | **描述** | -|--------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Application Id | EMR Serverless 应用程序 ID(格式如 `00fkht2eodujab09`),可在 [EMR Serverless 控制台](https://console.aws.amazon.com/emr/home#/serverless) 获取 | -| Execution Role Arn | 作业执行 IAM 角色的 ARN(格式如 `arn:aws:iam::123456789012:role/EMRServerlessRole`),该角色需要有访问 S3、Glue 等服务的权限 | -| Job Name | 作业名称(可选),用于在 EMR Serverless 控制台中标识作业 | -| StartJobRunRequest JSON | [StartJobRunRequest](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/emrserverless/model/StartJobRunRequest.html) 中 `JobDriver` 和 `ConfigurationOverrides` 部分对应的 JSON,详细定义见下方示例。**注意**:`ApplicationId` 和 `ExecutionRoleArn` 无需在 JSON 中重复填写,系统会自动从上方参数注入 | +| **任务参数** | **描述** | +|-------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Application Id | EMR Serverless 应用程序 ID(格式如 `00fkht2eodujab09`),可在 [EMR Serverless 控制台](https://console.aws.amazon.com/emr/home#/serverless) 获取 | +| Execution Role Arn | 作业执行 IAM 角色的 ARN(格式如 `arn:aws:iam::123456789012:role/EMRServerlessRole`),该角色需要有访问 S3、Glue 等服务的权限 | +| Job Name | 作业名称(可选),用于在 EMR Serverless 控制台中标识作业 | +| StartJobRunRequest JSON | [StartJobRunRequest](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/emrserverless/model/StartJobRunRequest.html) 中 `JobDriver` 和 `ConfigurationOverrides` 部分对应的 JSON,详细定义见下方示例。**注意**:`ApplicationId` 和 `ExecutionRoleArn` 无需在 JSON 中重复填写,系统会自动从上方参数注入 | ![RUN_JOB_FLOW](../../../../img/tasks/demo/emr_serverless_create.png) - ## 任务样例 ### 提交 Spark 作业 该样例展示了如何创建 `EMR_SERVERLESS` 任务节点来提交一个 Spark 作业到 EMR Serverless 应用程序。 - StartJobRunRequest JSON 参数样例(Spark): ```json @@ -145,3 +141,4 @@ SUBMITTED → PENDING → SCHEDULED → RUNNING → SUCCESS - **Execution Role** 需要有以下最小权限:`emr-serverless:StartJobRun`、`emr-serverless:GetJobRun`、`emr-serverless:CancelJobRun`,以及作业所需的 S3、Glue 等数据访问权限 - `StartJobRunRequest JSON` 中无需填写 `ApplicationId` 和 `ExecutionRoleArn` 字段,系统会自动从表单参数注入 - EMR Serverless 任务支持故障转移(Failover):当 Worker 节点发生故障时,新的 Worker 可以通过 `appIds`(即 `jobRunId`)恢复对正在运行作业的跟踪 + From 76882a534017c5a943d0af30ff37e4751946679d Mon Sep 17 00:00:00 2001 From: norrishuang <12380647@qq.com> Date: Tue, 17 Mar 2026 02:14:44 +0000 Subject: [PATCH 10/10] style: fix eslint line-length issues in emr-serverless i18n strings --- dolphinscheduler-ui/src/locales/en_US/project.ts | 12 ++++++++---- dolphinscheduler-ui/src/locales/zh_CN/project.ts | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/dolphinscheduler-ui/src/locales/en_US/project.ts b/dolphinscheduler-ui/src/locales/en_US/project.ts index 495f3e8b10d1..e45e6bc50253 100644 --- a/dolphinscheduler-ui/src/locales/en_US/project.ts +++ b/dolphinscheduler-ui/src/locales/en_US/project.ts @@ -742,13 +742,17 @@ export default { emr_steps_define_json: 'stepsDefineJson', emr_steps_define_json_tips: 'Please enter the definition of the emr step.', emr_serverless_application_id: 'Application ID', - emr_serverless_application_id_tips: 'Please enter the EMR Serverless Application ID', + emr_serverless_application_id_tips: + 'Please enter the EMR Serverless Application ID', emr_serverless_execution_role_arn: 'Execution Role ARN', - emr_serverless_execution_role_arn_tips: 'Please enter the IAM execution role ARN', + emr_serverless_execution_role_arn_tips: + 'Please enter the IAM execution role ARN', emr_serverless_job_name: 'Job Name', - emr_serverless_job_name_tips: 'Optional. Defaults to the task name if empty', + emr_serverless_job_name_tips: + 'Optional. Defaults to the task name if empty', emr_serverless_start_job_run_json: 'StartJobRun JSON', - emr_serverless_start_job_run_json_tips: 'Please enter the StartJobRun request JSON (jobDriver, configurationOverrides, etc.)', + emr_serverless_start_job_run_json_tips: + 'Please enter the StartJobRun request JSON (jobDriver, configurationOverrides, etc.)', zeppelin_note_id: 'zeppelinNoteId', zeppelin_note_id_tips: 'Please enter the note id of your zeppelin note', zeppelin_paragraph_id: 'zeppelinParagraphId', diff --git a/dolphinscheduler-ui/src/locales/zh_CN/project.ts b/dolphinscheduler-ui/src/locales/zh_CN/project.ts index 0f3da8189eeb..11a35461f2bc 100644 --- a/dolphinscheduler-ui/src/locales/zh_CN/project.ts +++ b/dolphinscheduler-ui/src/locales/zh_CN/project.ts @@ -730,7 +730,8 @@ export default { emr_serverless_job_name: '作业名称', emr_serverless_job_name_tips: '可选,为空时默认使用任务名称', emr_serverless_start_job_run_json: 'StartJobRun JSON', - emr_serverless_start_job_run_json_tips: '请输入 StartJobRun 请求 JSON(jobDriver、configurationOverrides 等)', + emr_serverless_start_job_run_json_tips: + '请输入 StartJobRun 请求 JSON(jobDriver、configurationOverrides 等)', zeppelin_note_id: 'zeppelinNoteId', zeppelin_note_id_tips: '请输入zeppelin note id', zeppelin_paragraph_id: 'zeppelinParagraphId',