本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon EMR 的早期 AMI 版本创建集群
Amazon EMR 2.x 和 3.x 发行版是按 AMI 版本引用的。对于 Amazon EMR 版本 4.0.0 及更高版本,通过使用版本标签(如 emr-5.11.0
)按发行版来引用版本。当您以编程方式使用 Amazon CLI 或创建集群时,这种变化最为明显。
当您使用使用 AMI 发行版创建集群时,请使用--ami-version
选项,例如--ami-version 3.11.0
。 Amazon CLI 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-version3.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-7.8.0
") .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 将自动预置额外的任务节点,以替换出现故障的节点。
对于每个集群步骤,您可以有不同数量的任务节点。您还可以向正在运行的集群添加步骤,以修改任务节点的数量。由于所有步骤在默认情况下都保证按顺序运行,您可以为任何步骤指定运行任务节点的数量。