reducer可以从不同的映射器中获取多个输入吗?

时间:2018-04-23 04:01:04

标签: java hadoop mapreduce

减速机可以多次输入吗?两个映射器的关键是相同的,但值类型不同。首先是MapReduce程序,它输出(text,floatwritable),其中floatwritable是值类型,text是键。第二个是输出(text,SongStats)的映射器,其中SongStats是实现Writable的自定义数据类型。我希望reducer在运行计算时获取早期map reduce和第二个mapper的输出。我认为第一个MapReduce程序的输出可能太大而无法保存在分布式缓存中。任何指针都会有所帮助。我正在用Java编写程序。

1 个答案:

答案 0 :(得分:0)

不,reducer只能接受方法定义中定义的特定输入:

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

最好的办法是编写一个新的MapReduce作业,使用MultipleInputs转换前一个MapReduce作业的输出(具有text,floatwritable)和其他Mapper的输出(具有文本,SongStats)类似的类型(例如文本,文本或任何最适合您需要的东西)并将其传递给您的减速器。

来源:

https://hadoop.apache.org/docs/r2.9.0/api/org/apache/hadoop/mapreduce/Reducer.html

https://hadoop.apache.org/docs/r2.6.3/api/org/apache/hadoop/mapreduce/lib/input/MultipleInputs.html