Как отправить несколько шагов в Hadoop с помощью API Elastic MapReduce?

Документация Amazon EMR для добавления шагов в кластер говорит о том, что один шаг Elastic MapReduce может отправить несколько заданий в Hadoop. Однако Amazon EMR Documentation for Step configuration предполагает, что на одном шаге может быть выполнено только одно исполнение hasoop-streaming.jar(то есть HadoopJarStep - это HadoopJarStepConfig, а не массив HadoopJarStepConfigs).

Каков правильный синтаксис для подачи нескольких заданий в Hadoop на шаг?

Ответы

Ответ 1

Как Amazon EMR Documentation, вы можете создать кластер для запуска некоторого script my_script.sh в главном экземпляре в шаге:

aws emr create-cluster --name "Test cluster" --ami-version 3.11 --use-default-roles
    --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instance count 3
    --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,Jar=s3://elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://mybucket/script-path/my_script.sh"]

my_script.sh должен выглядеть примерно так:

#!/usr/bin/env bash

hadoop jar my_first_step.jar [mainClass] args... &
hadoop jar my_second_step.jar [mainClass] args... &
.
.
.
wait

Таким образом, несколько заданий отправляются в Hadoop на том же этапе - но, к сожалению, интерфейс EMR не сможет их отслеживать. Для этого вы должны использовать веб-интерфейсы Hadoop, как показано здесь, или просто ssh для основного экземпляра и изучить с помощью mapred job.