如果我将reduce任务的数量设置为 100 当我运行作业时,假设reduce任务数超过(根据我的理解,reduce任务数取决于我们从Map器获得的键值。假设我正在设置 (1,) 以及 (2,bcd) 作为mapper中的键值,reduce任务的数量将是2)mapreduce将如何处理它?。
100
(1,)
(2,bcd)
tzcvj98z1#
根据我的理解,reduce任务的数量取决于我们从mapper获得的键值你的理解好像错了。reduce任务的数量并不取决于我们从mapper获得的键值。在mapreduce作业中,可以根据每个作业配置减速器的数量,并在driver类中进行设置。例如,如果我们的作业需要2个reducer,那么我们需要在mapreduce作业的driver类中将其设置为below:-
job.setNumReduceTasks(2);
在hadoop:权威指南书中,tom white指出,设置减速机计数是一种艺术,而不是科学。所以我们必须决定我们的工作需要多少减速器。例如,如果中间Map器输入为(1,)和(2,bcd),并且没有在驱动程序类中设置还原器的数量,那么mapreduce在默认情况下只运行1个还原器,两个键值对将由一个还原器处理,并且您将在指定的输出目录中获得一个输出文件。
vktxenjb2#
无论(键,值)对的数目如何,mapreduce上的reducer数的默认值为1。如果为mapreduce作业设置缩减器的数目,则无论不同(键、值)对的数目如何,缩减器的数目都不会超过定义的值。一旦mapper任务完成,输出由 Partitioner 把数据分成 Reducers . hadoop的默认分区器是 HashPartitioner 它根据密钥的散列值对数据进行分区。它有一个名为 getPartition . 它需要 key.hashCode() & Integer.MAX_VALUE 找到了 modulus 使用 number of reduce tasks .所以减速机的数量永远不会超过你在 Driver 班级。
Partitioner
Reducers
HashPartitioner
getPartition
key.hashCode() & Integer.MAX_VALUE
modulus
number of reduce tasks
Driver
2条答案
按热度按时间tzcvj98z1#
根据我的理解,reduce任务的数量取决于我们从mapper获得的键值
你的理解好像错了。reduce任务的数量并不取决于我们从mapper获得的键值。在mapreduce作业中,可以根据每个作业配置减速器的数量,并在driver类中进行设置。
例如,如果我们的作业需要2个reducer,那么我们需要在mapreduce作业的driver类中将其设置为below:-
在hadoop:权威指南书中,tom white指出,设置减速机计数是一种艺术,而不是科学。
所以我们必须决定我们的工作需要多少减速器。例如,如果中间Map器输入为(1,)和(2,bcd),并且没有在驱动程序类中设置还原器的数量,那么mapreduce在默认情况下只运行1个还原器,两个键值对将由一个还原器处理,并且您将在指定的输出目录中获得一个输出文件。
vktxenjb2#
无论(键,值)对的数目如何,mapreduce上的reducer数的默认值为1。
如果为mapreduce作业设置缩减器的数目,则无论不同(键、值)对的数目如何,缩减器的数目都不会超过定义的值。
一旦mapper任务完成,输出由
Partitioner
把数据分成Reducers
. hadoop的默认分区器是HashPartitioner
它根据密钥的散列值对数据进行分区。它有一个名为getPartition
. 它需要key.hashCode() & Integer.MAX_VALUE
找到了modulus
使用number of reduce tasks
.所以减速机的数量永远不会超过你在
Driver
班级。