在Hadoop中,如果我们没有设置减速器数量,那么将创建多少减速器?
与地图集的数量一样,依赖于(总数据大小)/(输入拆分大小), 例如。如果数据大小为1 TB且输入分割大小为100 MB。然后映射器的数量将是(1000 * 1000)/ 100 = 10000(一万)。
减速机的数量取决于哪些因素?为工作创建了多少减速器?
答案 0 :(得分:10)
减少了多少? (来自official documentation)
正确的减少数量似乎是0.95或1.75乘以 (节点数)*(每个节点的最大容器数)。
使用0.95时,所有缩减都可以立即启动,并在地图完成后开始传输地图输出。使用1.75,更快的节点将完成第一轮减少并启动第二波减少,从而更好地实现负载平衡。
增加减少的数量会增加框架开销,但会增加负载平衡并降低故障成本。
上面的缩放因子略小于整数,以便在框架中为推测任务和失败任务保留一些减少时隙。
本文也介绍了Mapper计数。
有多少地图?
地图数量通常由输入的总大小驱动,即输入文件的总块数。
地图的正确并行度似乎是每个节点大约10-100个地图,尽管已经为非常cpu-light地图任务设置了300个地图。任务设置需要一段时间,因此最好是地图至少需要一分钟才能执行。
因此,如果你期望10TB的输入数据并且块大小为128MB ,你最终会得到 82,000个地图,除非Configuration.set(MRJobConfig.NUM_MAPS, int)
(其中只提供框架的提示)用于将其设置得更高。
如果要为减速器数更改默认值1,可以将以下属性(来自hadoop 2.x版本)设置为命令行参数
<强> mapreduce.job.reduces 强>
OR
您可以使用
以编程方式设置job.setNumReduceTasks(integer_numer);
再看一个相关的SE问题:What is Ideal number of reducers on Hadoop?
答案 1 :(得分:4)
默认情况下,减少器的数量设置为1。
您可以通过添加参数
来更改它 mapred.reduce.tasks
在命令行或驱动程序代码或您传递的conf文件中。
例如:命令行参数:bin/hadoop jar ... -Dmapred.reduce.tasks=<num reduce tasks>
或者,在驱动程序代码中:conf.setNumReduceTasks(int num);