使用步骤功能运行AWS EMR集群

问题描述 投票:0回答:1

我对AWS Step Functions和AWS Lambda Functions非常陌生,确实可以使用一些帮助来使EMR群集通过Step Functions运行。下面的代码显示了我当前的状态机结构的示例:

{
  "Comment": "This is a test for running the structure of the CustomCreate job.",
  "StartAt": "PreStep",
  "States": {
    "PreStep": {
      "Comment": "Check that all the necessary files exist before running the job.",
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:XXXXXXXXXX:function:CustomCreate-PreStep-Function",
      "Next": "Run Job Choice"
    },
    "Run Job Choice": {
      "Comment": "This step chooses whether or not to go forward with running the main job.",
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.FoundNecessaryFiles",
          "BooleanEquals": true,
          "Next": "Spin Up Cluster"
        },
        {
          "Variable": "$.FoundNecessaryFiles",
          "BooleanEquals": false,
          "Next": "Do Not Run Job"
        }
      ]
    },
    "Do Not Run Job": {
      "Comment": "This step triggers if the PreStep fails and the job should not run.",
      "Type": "Fail",
      "Cause": "PreStep unsuccessful"
    },
    "Spin Up Cluster": {
      "Comment": "Spins up the EMR Cluster.",
      "Type": "Pass",
      "Next": "Update Env"
    },
    "Update Env": {
      "Comment": "Update the environment variables in the EMR Cluster.",
      "Type": "Pass",
      "Next": "Run Job"
    },
    "Run Job": {
      "Comment": "Add steps to the EMR Cluster.",
      "Type": "Pass",
      "End": true
    }
  }
}

以下工作流程图显示了enter image description here

PreStep

运行作业选择任务使用一个简单的Lambda函数来检查运行此作业所需的文件是否在我的S3存储桶中,然后在必需的文件启动的情况下启动集群被发现。这些任务正常运行。

我不确定如何处理EMR群集相关步骤。

在我当前的结构中,第一个任务是启动EMR集群。这可以通过直接使用Step Function JSON来完成,或者最好使用我位于S3存储桶上的JSON Cluster Config文件(标题为EMR-cluster-setup.json)来完成。

我的下一个任务是更新EMR群集环境变量。我在S3存储桶上有一个.sh脚本,可以执行此操作。我的S3存储桶上还有一个JSON文件(标题为EMR-RUN-Script.json),该文件将向EMR集群添加第一步,该集群将运行并提供.sh脚本。我只需要从EMR群集中运行该JSON文件,就不知道如何使用“步进功能”来运行该JSON文件。 EMR-RUN-SCRIPT.json的代码如下所示

[
    {
        "Name": "EMR-RUN-SCRIPT",
        "ActionOnFailure": "CONTINUE",
        "HadoopJarStep": {
            "Jar": "s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar",
            "Args": [
                "s3://PATH/TO/env_configs.sh"
            ]
        }
    }
]

我的第三项任务是向EMR群集添加一个包含spark-submit命令的步骤。该命令在我的S3存储桶上的JSON配置文件(标题为EMR-RUN-STEP.json)中进行了描述,该文件可以通过与上一步中上传环境配置文件类似的方式上传到EMR群集。 EMR-RUN-STEP.json的代码如下所示

[
    {
        "Name": "EMR-RUN-STEP",
        "ActionOnFailure": "CONTINUE",
        "HadoopJarStep": {
            "Jar": "command-runner.jar",
            "Args": [
                "bash", "-c",
                "source /home/hadoop/.bashrc && spark-submit --master yarn --conf spark.yarn.submit.waitAppCompletion=false --class CLASSPATH.TO.MAIN s3://PATH/TO/JAR/FILE"
            ]
        }
    }
]

最后,我要执行一项任务,以确保EMR集群在完成运行后终止。

我知道这个问题可能涉及很多问题,但是对于上述任何问题的帮助,我将不胜感激。无论是遵循我上面概述的结构,还是了解其他解决方案,我都乐于提供任何形式的帮助。预先谢谢你。

我对AWS Step Functions和AWS Lambda Functions非常陌生,确实可以使用一些帮助来使EMR群集通过Step Functions运行。我当前的状态机结构的示例是...

amazon-web-services amazon-emr state-machine aws-step-functions
1个回答
0
投票

''KeepJobFlowAliveWhenNoSteps':False

© www.soinside.com 2019 - 2024. All rights reserved.