在Hadoop中,如果我们没有设置reducer的数量,那么会创建多少个reducer?
映射器的数量取决于(总数据大小)/(输入拆分大小), 例如。如果数据大小为 1 TB,输入拆分大小为 100 MB。那么映射器的数量将为 (1000*1000)/100 = 10000(万)。
减速器的数量取决于哪些因素?为一个工作创建了多少个减速器?
减少多少?(来自官方文档)
正确的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);
默认情况下,减速器的数量设置为 1.
您可以通过添加参数来更改它
mapred.reduce.tasks
在命令行或驱动程序代码或您传递的 conf 文件中。
例如:命令行参数:
bin/hadoop jar ... -Dmapred.reduce.tasks=<num reduce tasks>
或者,在驱动程序代码中为:conf.setNumReduceTasks(int num);