mapreduce.job.running.reduce.limit 和 mapred.reduce.tasks 有什么区别

What's the difference between mapreduce.job.running.reduce.limit and mapred.reduce.tasks

我们使用的是 Hadoop 2.7.1,我发现以下 2 个参数都设置在一些现有的 MapReduce 代码中,

mapreduce.job.running.reduce.limit=500
mapred.reduce.tasks=50

后者似乎有效,因为最终生成了 50 个 part-* 文件。

有谁知道这两个参数之间的区别,如果人们同时指定这两个参数,实际会发生什么?谢谢。

来自官方文档:

mapreduce.job.running.reduce.limit

每个作业同时减少任务的最大数量。没有限制 如果此值为 0 或负数。

what would actually happen if people specify both of them?

不会对您的示例产生影响。但是,如果您将限制设置为 50 并将任务设置为 500,hadoop 将不会 运行 一次所有 500 个减速器,即使您的集群容量足够了。