Как сделать так, чтобы код Scala выполнялся в кластере EMR с помощью SDK? - PullRequest
0 голосов
/ 23 марта 2020

Я написал код с Scala для запуска кластера в EMR. Также у меня есть приложение Spark, написанное на Scala. Я хочу запустить это приложение Spark на кластере EMR. Но возможно ли это сделать в первом сценарии (запускающем кластер EMR)? Я хочу сделать все это с SDK, а не через консоль или CLI. Это должна быть своего рода автоматизация, а не отдельная ручная работа (или минимизация ручной работы).

В основном;

Запуск кластера EMR -> Выполнить задание зажигания на EMR -> Завершить после задания закончено

Как мне это сделать, если это возможно? Спасибо.

Ответы [ 2 ]

2 голосов
/ 23 марта 2020
HadoopJarStepConfig sparkStepConf = new HadoopJarStepConfig()
  .withJar("command-runner.jar")
  .withArgs(params);  

final StepConfig sparkStep = new StepConfig()
  .withName("Spark Step")
  .withActionOnFailure("CONTINUE")
  .withHadoopJarStep(sparkStepConf);

AddJobFlowStepsRequest request = new AddJobFlowStepsRequest(clusterId)
  .withSteps(new ArrayList<StepConfig>(){{add(sparkStep);}});

AddJobFlowStepsResult result = emr.addJobFlowSteps(request);
return result.getStepIds().get(0);
0 голосов
/ 24 марта 2020

Если вы ищете просто автоматизацию, вам следует прочитать о Pipeline Orchestration-

  • EMR - это сервис AWS, который позволяет запускать распределенные приложения
  • AWS DataPipeline это инструмент Orchestration, который позволяет вам запускать задания (действия) на ресурсах (EMR или даже EC2)

Если вы просто хотите последовательно запускать искомое задание, я бы предложил создать конвейер данных и настройку вашего конвейера на один шаг, который заключается в запуске свечи зажигания Scala на главном узле с использованием "shellcommandactivity". Другое преимущество заключается в том, что используемый вами jar-файл может быть сохранен в AWS S3 (служба хранения объектов), и вы просто предоставите путь s3 к вашей DataPipeline, и он подберет этот jar-файл, войдет в сервис EMR, который он принес up (с предоставленными вами конфигурациями) - клонируйте этот jar-файл на главном узле, запустите jar-файл с конфигурацией, указанной в "shellcommandactivity", и после завершения задания (успешно или с ошибкой) он завершит работу EMR кластер, поэтому вы не платите за это и зарегистрируйте вывод

Пожалуйста, прочитайте больше в нем: https://aws.amazon.com/datapipeline/ & https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/what-is-datapipeline.html

И если вы хотите, вы можете запустить этот конвейер через AWS SDK или даже настроить конвейер для запуска по расписанию

...