Я очень новичок в пошаговых функциях AWS и лямбда-функциях AWS и мог бы действительно помочь при запуске кластера EMR через пошаговые функции. Пример моей текущей структуры конечного автомата показан следующим кодом
{
"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 и Run Job Choice задачи используют простую лямбда-функцию, чтобы проверить, что файлы, необходимые для запуска этой работы, существуют в моем S3 Bucket, а затем перейти к ускорению кластера при условии, что найдены необходимые файлы,Эти задачи работают правильно.
В чем я не уверен, так это в том, как обрабатывать шаги, связанные с кластером EMR.
В моей нынешней структуре первая задача состоит в том, чтобы ускорить кластер EMR. это можно сделать напрямую с помощью пошаговой функции JSON или, предпочтительно, с помощью файла конфигурации кластера JSON (под названием EMR-cluster-setup.json
), который я нашел в моем S3 Bucket.
Моя следующая задача - обновить переменные среды EMR Cluster. У меня есть сценарий .sh
, расположенный на моем S3 Bucket, который может сделать это. У меня также есть файл JSON (с названием EMR-RUN-Script.json
), расположенный в моем S3 Bucket, который добавит первый шаг к кластеру EMR, который запустится и создаст сценарий .sh
. Мне просто нужно запустить этот JSON-файл из кластера EMR, что я не знаю, как сделать с помощью пошаговых функций. Код для 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"
]
}
}
]
Моя третья задача - добавить шаг, содержащий команду spark-submit, в кластер EMR. Эта команда описана в файле конфигурации JSON (с названием EMR-RUN-STEP.json
), расположенном в моем S3 Bucket, который можно загрузить в кластер 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 после завершения его работы.
Я знаю, что это может бытьмного вовлечено в этот вопрос, но я был бы очень признателен за любую помощь по любому из вопросов, описанных выше. Будь то структура, о которой я говорил выше, или если вы знаете другое решение, я открыт для любой формы помощи. Заранее спасибо.