我对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
}
}
}
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运行。我当前的状态机结构的示例是...
''KeepJobFlowAliveWhenNoSteps':False