mapreduce中mapper和reducer任务的数量

93ze6v8z  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(396)

如果我将reduce任务的数量设置为 100 当我运行作业时,假设reduce任务数超过(根据我的理解,reduce任务数取决于我们从Map器获得的键值。假设我正在设置 (1,) 以及 (2,bcd) 作为mapper中的键值,reduce任务的数量将是2)mapreduce将如何处理它?。

tzcvj98z

tzcvj98z1#

根据我的理解,reduce任务的数量取决于我们从mapper获得的键值
你的理解好像错了。reduce任务的数量并不取决于我们从mapper获得的键值。在mapreduce作业中,可以根据每个作业配置减速器的数量,并在driver类中进行设置。
例如,如果我们的作业需要2个reducer,那么我们需要在mapreduce作业的driver类中将其设置为below:-

job.setNumReduceTasks(2);

在hadoop:权威指南书中,tom white指出,设置减速机计数是一种艺术,而不是科学。
所以我们必须决定我们的工作需要多少减速器。例如,如果中间Map器输入为(1,)和(2,bcd),并且没有在驱动程序类中设置还原器的数量,那么mapreduce在默认情况下只运行1个还原器,两个键值对将由一个还原器处理,并且您将在指定的输出目录中获得一个输出文件。

vktxenjb

vktxenjb2#

无论(键,值)对的数目如何,mapreduce上的reducer数的默认值为1。
如果为mapreduce作业设置缩减器的数目,则无论不同(键、值)对的数目如何,缩减器的数目都不会超过定义的值。
一旦mapper任务完成,输出由 Partitioner 把数据分成 Reducers . hadoop的默认分区器是 HashPartitioner 它根据密钥的散列值对数据进行分区。它有一个名为 getPartition . 它需要 key.hashCode() & Integer.MAX_VALUE 找到了 modulus 使用 number of reduce tasks .
所以减速机的数量永远不会超过你在 Driver 班级。

相关问题