如何使用Elastic MapReduce API在一个步骤中向Hadoop提交多个作业?

ver*_*rve 14 hadoop amazon-web-services emr hadoop-streaming

Amazon EMR用于向集群添加步骤的文档表明,单个Elastic MapReduce步骤可以向Hadoop提交多个作业.但是,步骤配置的Amazon EMR文档表明,单个步骤只能容纳hadoop-streaming.jar的一次执行(即,HadoopJarStep是HadoopJarStepConfig而不是HadoopJarStepConfigs数组).

在一个步骤中向Hadoop提交多个作业的正确语法是什么?

ver*_*rve 5

就像Amazon EMR 文档所说的那样,您可以通过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"]
Run Code Online (Sandbox Code Playgroud)

my_script.sh 应该是这样的:

#!/usr/bin/env bash

hadoop jar my_first_step.jar [mainClass] args... &
hadoop jar my_second_step.jar [mainClass] args... &
.
.
.
wait
Run Code Online (Sandbox Code Playgroud)

这样,多个作业在同一步骤中提交到 Hadoop ---但不幸的是,EMR 界面将无法跟踪它们。为此,您应该使用此处所示的 Hadoop Web 界面,或者仅ssh使用主实例并使用mapred job.