Amazon EMR

综述

Amazon EMR 任务类型,用于在AWS上操作EMR集群并执行计算任务。 后台使用 aws-java-sdk 将JSON参数转换为任务对象,提交到AWS,目前支持两种程序类型:

任务参数

任务参数 描述
程序类型 选择程序类型,如果是RUN_JOB_FLOW,则需要填写jobFlowDefineJson,如果是ADD_JOB_FLOW_STEPS,则需要填写stepsDefineJson
jobFlowDefineJson RunJobFlowRequest 对象对应的JSON,详细JSON定义参见 API_RunJobFlow_Examples
stepsDefineJson AddJobFlowStepsRequest 对象对应的JSON,详细JSON定义参见 API_AddJobFlowSteps_Examples

任务样例

创建EMR集群并运行Steps

该样例展示了如何创建RUN_JOB_FLOW类型EMR任务节点,以执行SparkPi为例,该任务会创建一个EMR集群,并且执行SparkPi示例程序。 RUN_JOB_FLOW

jobFlowDefineJson 参数样例

{
  "Name": "SparkPi",
  "ReleaseLabel": "emr-5.34.0",
  "Applications": [
    {
      "Name": "Spark"
    }
  ],
  "Instances": {
    "InstanceGroups": [
      {
        "Name": "Primary node",
        "InstanceRole": "MASTER",
        "InstanceType": "m4.xlarge",
        "InstanceCount": 1
      }
    ],
    "KeepJobFlowAliveWhenNoSteps": false,
    "TerminationProtected": false
  },
  "Steps": [
    {
      "Name": "calculate_pi",
      "ActionOnFailure": "CONTINUE",
      "HadoopJarStep": {
        "Jar": "command-runner.jar",
        "Args": [
          "/usr/lib/spark/bin/run-example",
          "SparkPi",
          "15"
        ]
      }
    }
  ],
  "JobFlowRole": "EMR_EC2_DefaultRole",
  "ServiceRole": "EMR_DefaultRole"
}

向运行中的EMR集群添加Step

该样例展示了如何创建ADD_JOB_FLOW_STEPS类型EMR任务节点,以执行SparkPi为例,该任务会向运行中的EMR集群添加一个SparkPi示例程序。 ADD_JOB_FLOW_STEPS JobFlowId

stepsDefineJson 参数样例

{
  "JobFlowId": "j-3V628TKAERHP8",
  "Steps": [
    {
      "Name": "calculate_pi",
      "ActionOnFailure": "CONTINUE",
      "HadoopJarStep": {
        "Jar": "command-runner.jar",
        "Args": [
          "/usr/lib/spark/bin/run-example",
          "SparkPi",
          "15"
        ]
      }
    }
  ]
}

注意事项:

  • EMR 任务类型的故障转移尚未实现。目前,DolphinScheduler 仅支持对 yarn task type 进行故障转移。其他任务类型,如 EMR 任务、k8s 任务尚未准备好。
  • stepsDefineJson 一个任务定义仅支持关联单个step,这样可以更好的保证任务状态的可靠性。