Запуск AWS EMR Cluster с использованием пошаговых функций - PullRequest
0 голосов
/ 14 октября 2019

Я очень новичок в пошаговых функциях 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
    }
  }
}

, который показан на следующей диаграмме рабочего процесса enter image description here

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 после завершения его работы.

Я знаю, что это может бытьмного вовлечено в этот вопрос, но я был бы очень признателен за любую помощь по любому из вопросов, описанных выше. Будь то структура, о которой я говорил выше, или если вы знаете другое решение, я открыт для любой формы помощи. Заранее спасибо.

1 Ответ

0 голосов
/ 08 ноября 2019

KeepJobFlowAliveWhenNoSteps: False

добавить указанные выше конфигурации в сценарий создания кластера emr. он автоматически завершит кластеры emr, когда все шаги будут завершены emr boto3 config enter image description here

...