使用 Step Functions 调用 Amazon EMR Serverless - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Step Functions 调用 Amazon EMR Serverless

Step Functions 可以直接从 Amazon States Language (ASL) 控制某些 Amazon 服务。有关使用 Amazon Step Functions 及其集成的更多信息,请参阅以下内容:

优化的 EMR Serverless 集成与 EMR Serverless Amazon 开发工具包集成有何不同
  • 优化的 EMR Serverless 服务集成有一组自定义的 API,用于封装底层的 EMR Serverless API。由于这种自定义,优化的 EMR Serverless 集成与 EMR Serverless Amazon 开发工具包服务集成有很大不同。此外,优化的 EMR Serverless 集成支持运行作业 (.sync) 集成模式。

  • 不支持等待具有任务令牌的回调集成模式。

EMR Serverless 服务集成 API

要将 Amazon Step Functions 与 EMR Serverless 集成,您可以使用以下六个 EMR Serverless 服务集成 API。这些服务集成 API 与相应的 EMR Serverless API 相似,但在传递的字段和返回的响应方面有所不同。

下表描述了每个服务集成 API 及其相应 EMR Serverless API 之间的差异。

EMR Serverless 服务集成 API 和相应的 EMR Serverless API
EMR Serverless 服务集成 API 相应的 EMR Serverless API 区别

createApplication

创建应用程序。

EMR Serverless 与一种独特类型的 IAM 角色(称为服务相关角色)关联。要使 createApplicationcreateApplication.sync 起作用,您必须配置必要的权限以创建与服务关联的角色 AmazonServiceRoleForAmazonEMRServerless。有关此问题的更多信息,包括您可以添加到 IAM 权限策略的语句,请参阅使用 EMR Serverless 的服务关联角色

CreateApplication

createApplication.sync

创建应用程序。

CreateApplication

EMR Serverless API 和 EMR Serverless 服务集成 API 的请求和响应之间没有区别。但是,createApplication.sync 会等待应用程序进入 CREATED 状态。

startApplication

启动指定的应用程序并初始化该应用程序的初始容量(如果已配置)。

StartApplication

EMR Serverless API 响应不包含任何数据,但 EMR Serverless 服务集成 API 响应包含以下数据。

{ "ApplicationId": "string" }

startApplication.sync

启动指定的应用程序并初始化初始容量(如果已配置)。

StartApplication

EMR Serverless API 响应不包含任何数据,但 EMR Serverless 服务集成 API 响应包含以下数据。

{ "ApplicationId": "string" }

此外,startApplication.sync 会等待应用程序进入 STARTED 状态。

stopApplication

停止指定的应用程序并释放初始容量(如果已配置)。在停止应用程序之前,必须完成或取消所有已计划和正在运行的作业。

StopApplication

EMR Serverless API 响应不包含任何数据,但 EMR Serverless 服务集成 API 响应包含以下数据。

{ "ApplicationId": "string" }

stopApplication.sync

停止指定的应用程序并释放初始容量(如果已配置)。在停止应用程序之前,必须完成或取消所有已计划和正在运行的作业。

StopApplication

EMR Serverless API 响应不包含任何数据,但 EMR Serverless 服务集成 API 响应包含以下数据。

{ "ApplicationId": "string" }

此外,stopApplication.sync 会等待应用程序进入 STOPPED 状态。

deleteApplication

删除应用程序 应用程序必须处于 STOPPEDCREATED 状态才能被删除。

DeleteApplication

EMR Serverless API 响应不包含任何数据,但 EMR Serverless 服务集成 API 响应包含以下数据。

{ "ApplicationId": "string" }

deleteApplication.sync

删除应用程序 应用程序必须处于 STOPPEDCREATED 状态才能被删除。

DeleteApplication

EMR Serverless API 响应不包含任何数据,但 EMR Serverless 服务集成 API 响应包含以下数据。

{ "ApplicationId": "string" }

此外,stopApplication.sync 会等待应用程序进入 TERMINATED 状态。

startJobRun

启动作业运行。

StartJobRun

startJobRun.sync

启动作业运行。

StartJobRun

EMR Serverless API 和 EMR Serverless 服务集成 API 的请求和响应之间没有区别。但是,startJobRun.sync 会等待应用程序进入 SUCCESS 状态。

cancelJobRun

取消作业运行。

CancelJobRun

cancelJobRun.sync

取消作业运行。

CancelJobRun

EMR Serverless API 和 EMR Serverless 服务集成 API 的请求和响应之间没有区别。但是,cancelJobRun.sync 会等待应用程序进入 CANCELLED 状态。

EMR 无服务器集成用例

对于优化的 EMR Serverless 服务集成,我们建议您创建单个应用程序,然后使用该应用程序运行多个作业。例如,在单个状态机中,您可以包含多个 startJobRun 请求,所有这些请求都使用同一个应用程序。以下 Task 状态示例显示了将 EMR Serverless API 与 Step Functions 集成的用例。有关 EMR Serverless 其他用例的信息,请参阅什么是 Amazon EMR Serverless

提示

要部署一个与 EMR Serverless 集成的状态机示例,以便在 Amazon Web Services 账户中运行多个作业,请参阅运行 EMR Serverless 作业

有关在将 Step Functions 与其他 Amazon 服务一起使用时如何配置 IAM 权限的信息,请参阅集成服务的 IAM 策略

在以下用例所示的示例中,请将斜体文本 替换为特定于资源的信息。例如,将 yourApplicationId 替换为 EMR Serverless 应用程序的 ID,例如 00yv7iv71inak893

创建应用程序

以下 Task 状态示例使用 createApplication.sync 服务集成 API 创建了一个应用程序。

"Create_Application": { "Type": "Task", "Resource": "arn:aws:states:::emr-serverless:createApplication.sync", "Parameters": { "Name": "MyApplication", "ReleaseLabel": "emr-6.9.0", "Type": "SPARK" }, "End": true }

启动应用程序

以下 Task 状态示例使用 startApplication.sync 服务集成 API 启动应用程序。

"Start_Application": { "Type": "Task", "Resource": "arn:aws:states:::emr-serverless:startApplication.sync", "Parameters": { "ApplicationId": "yourApplicationId" }, "End": true }

停止应用程序

以下 Task 状态示例使用 stopApplication.sync 服务集成 API 停止应用程序。

"Stop_Application": { "Type": "Task", "Resource": "arn:aws:states:::emr-serverless:stopApplication.sync", "Parameters": { "ApplicationId": "yourApplicationId" }, "End": true }

删除应用程序

以下 Task 状态示例使用 deleteApplication.sync 服务集成 API 删除应用程序。

"Delete_Application": { "Type": "Task", "Resource": "arn:aws:states:::emr-serverless:deleteApplication.sync", "Parameters": { "ApplicationId": "yourApplicationId" }, "End": true }

启动应用程序中的作业

以下 Task 状态示例使用 startJobRun.sync 服务集成 API 在应用程序中启动作业。

"Start_Job": { "Type": "Task", "Resource": "arn:aws:states:::emr-serverless:startJobRun.sync", "Parameters": { "ApplicationId": "yourApplicationId", "ExecutionRoleArn": "arn:aws:iam::123456789012:role/myEMRServerless-execution-role", "JobDriver": { "SparkSubmit": { "EntryPoint": "s3://<mybucket>/sample.py", "EntryPointArguments": ["1"], "SparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=4g --conf spark.driver.cores=2 --conf spark.driver.memory=4g --conf spark.executor.instances=1" } } }, "End": true }

取消应用程序中的作业

以下 Task 状态示例使用 cancelJobRun.sync 服务集成 API 取消应用程序中的作业。

"Cancel_Job": { "Type": "Task", "Resource": "arn:aws:states:::emr-serverless:cancelJobRun.sync", "Parameters": { "ApplicationId.$": "$.ApplicationId", "JobRunId.$": "$.JobRunId" }, "End": true }