Hadoop Reducer如何被调用



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

a 1
b 1
c 1
d 1
a 1

Hadoop拆分文件并将记录发送到3个映射器:

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次?

问题2对于我的reduce方法,

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

对于每个不同的键,reduce方法只调用1次吗?

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

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

是的。请记住,这并不适用于减速机的"尝试"。因此,如果一个reducer失败,计数可能会因为重试而变化。但是在一个JVM中,你的声明是成立的。

是否每个键只调用一次reduce方法?

是的。

在每次调用期间,values参数是否包含ALL同一个键的记录,即使有成千上万条记录?

是的,它们是流的(因此是可迭代对象)。因此,在数百万条记录的情况下,这将从本地硬盘读取。

相关内容

  • 没有找到相关文章

最新更新