reducers 的默认数量

问题描述 投票:0回答:2

在Hadoop中,如果我们没有设置reducer的数量,那么会创建多少个reducer?

映射器的数量取决于(总数据大小)/(输入拆分大小), 例如。如果数据大小为 1 TB,输入拆分大小为 100 MB。那么映射器的数量将为 (1000*1000)/100 = 10000(万)。

减速器的数量取决于哪些因素?为一个工作创建了多少个减速器?

hadoop mapreduce hdfs
2个回答
17
投票

减少多少?(来自官方文档)

正确的reduce数量好像是0.95或者1.75乘以 (节点数)*(每个节点的最大容器数)。

对于 0.95,所有的 reduce 都可以立即启动并在地图完成时开始传输地图输出。在 1.75 中,更快的节点将完成第一轮减少并启动第二波减少,从而更好地实现负载平衡。

增加减少的数量会增加框架开销,但会增加负载平衡并降低故障成本。

上面的比例因子略小于整数,以便在框架中为推测任务和失败任务保留一些减少槽。

本文也介绍了 Mapper 计数。

多少张地图?

地图的数量通常由输入的总大小驱动,即输入文件的总块数。

地图的正确并行度似乎是每个节点 10-100 个地图,尽管它已被设置为 300 个地图用于非常 cpu-light 地图任务。任务设置需要一段时间,因此最好至少花一分钟时间执行地图。

因此,如果您期望 10TB 的输入数据和 128MB 的块大小,您最终将得到 82,000 个映射,除非

Configuration.set(MRJobConfig.NUM_MAPS, int)
(仅向框架提供提示)用于设置它甚至更高。

如果要更改 reducer 数量的默认值 1,可以将以下属性(从 hadoop 2.x 版本)设置为命令行参数

mapreduce.job.reduces

您可以使用

以编程方式设置
job.setNumReduceTasks(integer_numer);

4
投票

默认情况下,减速器的数量设置为 1.

您可以通过添加参数来更改它

mapred.reduce.tasks
在命令行或驱动程序代码或您传递的 conf 文件中。

例如:命令行参数:

bin/hadoop jar ... -Dmapred.reduce.tasks=<num reduce tasks>
或者,在驱动程序代码中为:
conf.setNumReduceTasks(int num);

推荐阅读: https://wiki.apache.org/hadoop/HowManyMapsAndReduces

© www.soinside.com 2019 - 2024. All rights reserved.