如何在EMR上设置并行减速器的数量?

How to set the number of parallel reducers on EMR?

我运行正在 mrjob 从事 EMR 工作;我使用的是 AMI 2.4.7 版和 Hadoop 1.0.3 版。

我想为一个作业指定 reducer 的数量,因为我想为下一个作业提供更高的并行度。阅读此站点上其他问题的答案后,我认为我应该设置这些参数,所以我这样做了: mapred.reduce.tasks=576 mapred.tasktracker.reduce.tasks.maximum=24

然而,似乎没有选择第二个选项:EMR 和 Hadoop 接口都报告有 576 个 reduce 任务到 运行,但集群的容量保持在 72(r3 .8xlarge 实例)。

我什至看到 var/lib/hadoop/mapred/taskTracker/hadoop/jobcache/job_XXX/job.xml:<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>24</value></property> 中设置了该选项。尽管如此,只有默认数量 (9) 的实际减速器同时 运行ning。

为什么 EMR 没有选择该选项?还是有其他方法可以在一个实例上强制使用更多的 reducer?

对于 Hadoop 1,每个节点的 map 和 reduce 插槽是在守护程序级别设置的,因此如果值发生更改,则需要重新启动 TaskTracker 守护程序。

在 EMR 上,每个实例类型的默认槽数可在 http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/HadoopMemoryDefault_H1.0.3.html 处找到。

为了更改这些默认值,您需要使用 bootstrap 操作,例如 configure-hadoop,在 Hadoop 守护程序启动之前修改集群上的 mapred.tasktracker.reduce.tasks.maximum。有关详细信息,请参阅 http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-plan-bootstrap.html#PredefinedbootstrapActions_ConfigureHadoop

示例(需要修改以匹配用于创建集群的任何接口):

s3://<region>.elasticmapreduce/bootstrap-actions/configure-hadoop -m mapred.tasktracker.reduce.tasks.maximum=24

请注意,如果更改每个节点的插槽数,请务必调整 mapred.child.java.opts 以提供对于可用内存量而言合理的上限内存量。