Вызовите несколько искровых заданий в одном кластере EMR - PullRequest
1 голос
/ 31 марта 2019

Я хочу вызвать несколько искровых заданий, используя spark-submit в одном кластере EMR.EMR поддерживает это?Как этого добиться?В данный момент я использую AWS Lambda для вызова задания EMR для своей работы с искрой, но мы хотели бы расширить работу на несколько заданий зажигания в одном кластере EMR.

1 Ответ

0 голосов
/ 01 апреля 2019

Вы можете последовательно запустить несколько заданий зажигания на одном EMR, то есть следующее задание будет запущено после завершения предыдущего.Это делается с помощью EMR шагов .

Я использовал Java SDK для запуска этого, но вы можете увидеть в этой документации как добавить шаг, используя только CLI .

Мой код ниже использует spark-submit,но он не запускается напрямую, как в CLI.Вместо этого я запустил его как сценарий оболочки и включил переменную среды для HADOOP_USER_NAME, чтобы задание spark запускалось под указанным мной именем пользователя.Вы можете пропустить его, если хотите запустить задание под именем пользователя, которое вы вошли в свой EMR ( hadoop , по умолчанию).

В фрагменте кода ниже объект emr имеетвведите AmazonElasticMapReduce, предоставленный в SDK.Если вы используете подход CLI, он вам не понадобится.

Некоторые вспомогательные методы, такие как uploadConfFile, говорят сами за себя.Я использовал расширенную конфигурацию для приложения spark, и в отличие от files и jars, которые могут быть локальными или в s3 / hdfs, файл конфигурации должен находиться в локальном файле самой EMR.

Когда вы закончите, вы создадите шаг в своем кластере EMR, который запустит новое искровое приложение.Вы можете указать в EMR много шагов, которые будут выполняться один за другим.

//Upload the spark configuration you wish to use to a local file    
uploadConfFile(clusterId, sparkConf, confFileName);

//create a list of arguments - which is the complete command for spark-submit
List<String> stepargs = new ArrayList<String>();
//start with an envelope to specify the hadoop user name
stepargs.add("/bin/sh");
stepargs.add("-c");
//call to spark-submit with the incantation stating its arguments are provided next.
stepargs.add("HADOOP_USER_NAME="+task.getUserName()+" spark-submit \"$@\"");
stepargs.add("sh");
//add the spark-submit arguments
stepargs.add("--class");
stepargs.add(mainClass);
stepargs.add("--deploy-mode");
stepargs.add("cluster");
stepargs.add("--master");
stepargs.add("yarn");
stepargs.add("--files");
//a comma-separated list of file paths in s3
stepargs.add(files);
stepargs.add("--jars");
//a comma-separated list of file paths in s3
stepargs.add(jars);
stepargs.add("--properties-file");
//the file we uploaded to the EMR, with its full path
stepargs.add(confFileName);
stepargs.add(jar);
//add the jar specific arguments in here

AddJobFlowStepsResult result = emr.addJobFlowSteps(new AddJobFlowStepsRequest()
    .withJobFlowId(clusterId)
    .withSteps(new StepConfig()
            .withName(name)
            .withActionOnFailure(ActionOnFailure.CONTINUE)
            .withHadoopJarStep(new HadoopJarStepConfig()
                    .withJar("command-runner.jar")
                    .withArgs(stepargs))));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...