在mapreduce框架中,Map器生成的每个键都使用一个reducer。因此,您可能认为在hadoopmapreduce中指定reducer的数量没有任何意义,因为它依赖于程序。但是,hadoop允许您指定要使用的缩减器的数量(-d mapred.reduce.tasks=#of reducers)。这是什么意思?减速器数量的参数值是否指定有多少机器资源流向减速器,而不是实际使用的减速器数量?
i2byvkas1#
Map器生成的每个键都使用一个缩减器这个评论是不正确的。对由分组比较器分组的每个键执行一次reduce()方法调用。reducer(task)是一个处理零个或多个reduce()调用的进程。您所指的属性是关于reducer任务的数量。
gstyhher2#
为了简化@judge mental的回答(非常准确):一个reducer任务一次可以处理多个键,但是mapred.reduce.tasks=#参数声明了一个特定作业将同时运行多少个reducer任务。mapred.reduce.tasks=10的示例:您有2000个键,每个键有50个值(对于均匀分布的10000 k:v对)。每个减速机应大致处理200个键(1000 k:v对)。例如,如果mapred.reduce.tasks=20:您有2000个键,每个键有50个值(对于均匀分布的10000 k:v对)。每个减速器应大致处理100个键(500 k:v对)。在上面的例子中,每个减速机使用的键越少,整个工作就越快。。。当然,只要集群中有可用的reducer资源。
2条答案
按热度按时间i2byvkas1#
Map器生成的每个键都使用一个缩减器
这个评论是不正确的。对由分组比较器分组的每个键执行一次reduce()方法调用。reducer(task)是一个处理零个或多个reduce()调用的进程。您所指的属性是关于reducer任务的数量。
gstyhher2#
为了简化@judge mental的回答(非常准确):一个reducer任务一次可以处理多个键,但是mapred.reduce.tasks=#参数声明了一个特定作业将同时运行多少个reducer任务。
mapred.reduce.tasks=10的示例:
您有2000个键,每个键有50个值(对于均匀分布的10000 k:v对)。每个减速机应大致处理200个键(1000 k:v对)。
例如,如果mapred.reduce.tasks=20:
您有2000个键,每个键有50个值(对于均匀分布的10000 k:v对)。每个减速器应大致处理100个键(500 k:v对)。
在上面的例子中,每个减速机使用的键越少,整个工作就越快。。。当然,只要集群中有可用的reducer资源。