在MapReduce框架中,映射器生成的每个密钥都使用一个reducer。
所以你会认为在Hadoop MapReduce中指定Reducers的数量没有任何意义,因为它依赖于程序。但是,Hadoop允许您指定要使用的reducer的数量(-D mapred.reduce.tasks =#reducers)。
这是什么意思?减速器数量的参数值是否指定减少器的数量而不是实际减速器的数量?
在MapReduce框架中,映射器生成的每个密钥都使用一个reducer。
所以你会认为在Hadoop MapReduce中指定Reducers的数量没有任何意义,因为它依赖于程序。但是,Hadoop允许您指定要使用的reducer的数量(-D mapred.reduce.tasks =#reducers)。
这是什么意思?减速器数量的参数值是否指定减少器的数量而不是实际减速器的数量?
一个reducer用于映射器生成的每个键
这个评论不正确。对由分组比较器分组的每个密钥进行一次reduce()方法调用。 reducer(task)是一个处理零次或多次reduce()调用的进程。您参考的属性是关于减速器的数量 任务。
一个reducer用于映射器生成的每个键
这个评论不正确。对由分组比较器分组的每个密钥进行一次reduce()方法调用。 reducer(task)是一个处理零次或多次reduce()调用的进程。您参考的属性是关于减速器的数量 任务。
简化@Judge Mental(非常准确)的答案:reducer任务一次可以处理许多键,但mapred.reduce.tasks =#参数声明将为特定作业运行多少个同时的reducer任务。
例如,如果你的mapred.reduce.tasks = 10:
您有2,000个密钥,每个密钥有50个值(对于均匀分布的10,000 k:v对)。
每个减速器应大致处理200个键(1,000 k:v对)。
例如,如果你的mapred.reduce.tasks = 20:
您有2,000个密钥,每个密钥有50个值(对于均匀分布的10,000 k:v对)。
每个减速器应大致处理100个键(500 k:v对)。
在上面的示例中,每个reducer必须使用的密钥越少,整个作业的速度就越快......当然,只要集群中有可用的reducer资源。