Hadoop 如何在减速机的闭合方法中发射

Hadoop 如何在减速机的闭合方法中发射,hadoop,mapreduce,Hadoop,Mapreduce,继承自MapReduceBase的close方法没有参数: public void close() 因此,我没有像reduce方法那样的OutputCollector: void reduce(K2 key, Iterator<V2> values, OutputCollector<K3, V3> output, Reporter reporter) 我认为上下文参数可以发出key和value。 问题是我必须使用旧的API,我不知道如何在close方法中发出。 我想要

继承自
MapReduceBase
close
方法没有参数:

public void close()
因此,我没有像
reduce
方法那样的
OutputCollector

void reduce(K2 key, Iterator<V2> values, OutputCollector<K3, V3> output, Reporter reporter)
我认为上下文参数可以发出key和value。 问题是我必须使用旧的API,我不知道如何在close方法中发出。
我想要的是在上次调用reduce方法时运行一些代码并发出数据。

不幸的是,您使用的是旧API。新API有一个方法(补充
设置


我想知道Hadoop是否会让您作弊并将
OutputCollector
存储在Reducer类中的私有数据成员中,然后在close方法中引用它。我猜你不能,但可能值得一试。

你建议将OutputCollector存储在实例变量中,这是一个很好的建议-我相信你确实可以做到,尽管我不是肯定的。你可以做到,如果引用为空,则需要向reduce方法添加一些逻辑来缓存对OutputCollector的引用。我存储了
OutputCollector
,并成功地在
close
方法中发出数据。谢谢。对霍金伯德:你能解释一下你是怎么做到的吗?是否只是将outputcollector存储在另一个变量中,然后在close()方法中使用该变量进行输出?
void setup(Context context)