如何调用Hadoop Reducer?

时间:2015-10-08 15:50:56

标签: java hadoop mapreduce

假设我有一个如下文本文件:

a 1
b 1
c 1
d 1
a 1

Hadoop拆分文件并将记录发送到3个Mappers:

Mapper1: (a,1), (b,1)
Mapper2: (c,1)
Mapper3: (d,1), (a,1)

如果我只有2个减速机,则在洗牌之后排序,减速机'输入如下:

Reducer1: (a, [1, 1])
Reducer2: (b, [1]), (c, [1]), (d, [1])

问题1 :这是否意味着在Reducer1上,reduce方法将被完全调用1次,而对于Reducer2,reduce方法将被调用3次?< / p>

问题2 :对于我的reduce方法,

public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException

reduce方法是否只为每个不同的密钥调用一次?

问题3 :在每次调用期间,values参数都包含具有相同key所有记录,即使有数千个数百万条记录?

1 个答案:

答案 0 :(得分:2)

  

问题1:这是否意味着在Reducer1上,reduce方法将是   调用完全1次,在Reducer2上,将调用reduce方法   确实3次?

是。请记住,这并不适用于reducer&#34;尝试&#34;。因此,如果一个reducer失败,计数可能会因重试而有所不同。但是在一个JVM中你的主张是有效的。

  

对于每个不同的密钥,reduce方法只被调用一次吗?

  

在每次调用期间,values参数都包含ALL   具有相同密钥的记录,即使有数千万   记录?

是的,它们是流式传输的(因此是可迭代的)。因此,如果有数百万条记录,这将从本地硬盘读取。