如何在 EMR 上设置并行 reducer 的数量?
Posted
技术标签:
【中文标题】如何在 EMR 上设置并行 reducer 的数量?【英文标题】:How to set the number of parallel reducers on EMR? 【发布时间】:2015-02-26 12:20:41 【问题描述】:我正在使用 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) 的实际减速器同时运行。
为什么 EMR 没有选择该选项?或者是否有其他方法可以在实例上强制使用更多数量的 reducer?
【问题讨论】:
【参考方案1】:在 Hadoop 1 中,每个节点的 map 和 reduce 槽在守护程序级别设置,因此如果值更改,则需要重新启动 TaskTracker 守护程序。
在 EMR 上,每个实例类型的默认插槽数可以在 http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/HadoopMemoryDefault_H1.0.3.html 找到。
为了更改这些默认值,您需要在 Hadoop 守护进程启动之前使用configure-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
以提供对可用内存量合理的上限内存量。
【讨论】:
感谢@ChristopherB,这正是我正在寻找的答案。当然,知道问题出在哪里之后,我也在mrjob documentation中找到了:Hadoop的一些选项,比如每个节点运行map任务的最大数量,必须在bootstrap时设置,不会起作用使用 –jobconf。 但是我是否正确理解这在 Hadoop 2 中发生了变化,并且在其中,当在 jobconf 中指定时,此选项有效? 是的,Hadoop 2 和 YARN 改变了这一点。与 Hadoop 1 一样,每个节点没有最大 map/reduce 插槽。每个节点的并发任务数取决于每个容器请求的内存量和每个节点的可用内存量,可以作为 JobConf 的一部分进行更改。在 Hadoop 2 MapReduce 中,您将调整 mapreduce.reduce.memory.mb 和 mapreduce.reduce.java.opts 属性。默认配置位于docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/…。以上是关于如何在 EMR 上设置并行 reducer 的数量?的主要内容,如果未能解决你的问题,请参考以下文章