使用 Amazon EMR 的早期 AMI 版本创建集群 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Amazon EMR 的早期 AMI 版本创建集群

Amazon EMR 2.x 和 3.x 发行版是按 AMI 版本引用的。对于 Amazon EMR 版本 4.0.0 及更高版本,通过使用版本标签(如 emr-5.11.0)按发行版来引用版本。此更改在您使用 Amazon CLI 或以编程方式创建集群时最明显。

当您使用 Amazon CLI 通过 AMI 发行版创建集群时,请使用 --ami-version 选项(如 --ami-version 3.11.0)。Amazon EMR 4.0.0 及更高版本中推出的许多选项、功能和应用程序在您指定 --ami-version 时不可用。有关更多信息,请参阅《Amazon CLI 命令参考》中的 create-cluster

以下示例 Amazon CLI 命令使用 AMI 版本启动集群。

注意

为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号(^)。

aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 \ --applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,\ InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,\ InstanceType=m3.xlarge --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hadoop,\ Name="Configuring infinite JVM reuse",Args=["-m","mapred.job.reuse.jvm.num.tasks=-1"]

所有 Amazon EMR 发行版均以编程方式在 EMR API 中使用 RunJobFlowRequest 操作创建集群。以下示例 Java 代码使用 AMI 发行版 3.11.0 创建集群。

RunJobFlowRequest request = new RunJobFlowRequest() .withName("AmiVersion Cluster") .withAmiVersion("3.11.0") .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myKeyPair") .withInstanceCount(1) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m3.xlarge");

以下 RunJobFlowRequest 调用改用版本标签:

RunJobFlowRequest request = new RunJobFlowRequest() .withName("ReleaseLabel Cluster") .withReleaseLabel("emr-5.36.1") .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myKeyPair") .withInstanceCount(1) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m3.xlarge");

配置集群大小

当您的集群运行时,Hadoop 会决定处理数据所需的映射器和 Reducer 任务的数量。更大的集群应当有更多任务,以更好地利用资源并缩短处理时间。通常,EMR 集群在整个集群运行期间会保持相同的大小;当您创建集群时,需要设置任务数量。当您调整正在运行的集群大小时,您可以改变集群执行过程中的处理。因此,您可以在集群的生命周期内改变任务数量,而不是使用固定数量的任务。有两个配置选项可以帮助设置理想的任务数量:

  • mapred.map.tasksperslot

  • mapred.reduce.tasksperslot

您可以在 mapred-conf.xml 文件中设置这两个选项。当您向集群提交任务时,任务客户端会检查当前整个集群范围中可用的 map-reduce 槽位总数。然后,作业客户端会使用以下公式设置任务数量:

  • mapred.map.tasks = mapred.map.tasksperslot * 集群中的映射槽位数

  • mapred.reduce.tasks = mapred.reduce.tasksperslot * 集群中的 reduce 槽位

如果未配置任务数量,则作业客户端只会读取 tasksperslot 参数。通过引导操作 (对于全部集群) 或添加一个更改配置的步骤 (对每个作业单独执行)。您可以随时覆盖任务数量。

Amazon EMR 可以承受任务节点故障,即使任务节点不可用,也会继续执行集群。Amazon EMR 将自动预置额外的任务节点,以替换出现故障的节点。

对于每个集群步骤,您可以有不同数量的任务节点。您还可以向正在运行的集群添加步骤,以修改任务节点的数量。由于所有步骤在默认情况下都保证按顺序运行,您可以为任何步骤指定运行任务节点的数量。