reducer 可以从不同的映射器获取多个输入吗?
Can reducer take multiple inputs from different mappers?
reducer 可以接受多个输入吗?两个映射器的键相同,但值类型不同。首先是输出 (text, floatwritable) 的 MapReduce 程序,其中 floatwritable 是值类型,文本是键。第二个是输出 (text, SongStats) 的映射器,其中 SongStats 是实现可写的自定义数据类型。我希望 reducer 在 运行 计算时获取早期 map reduce 和第二个 mapper 的输出。我认为第一个 MapReduce 程序的输出可能太大而无法保存在分布式缓存中。任何指针都会有所帮助。我正在 Java.
中编写程序
不,reducer 只能接受方法定义中定义的特定输入:
public void reduce(Key key, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
您最好的选择是编写一个新的 MapReduce 作业,该作业使用 MultipleInputs
转换先前 MapReduce 作业的输出(具有文本,可浮动写入)和其他映射器的输出(具有文本, 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
reducer 可以接受多个输入吗?两个映射器的键相同,但值类型不同。首先是输出 (text, floatwritable) 的 MapReduce 程序,其中 floatwritable 是值类型,文本是键。第二个是输出 (text, SongStats) 的映射器,其中 SongStats 是实现可写的自定义数据类型。我希望 reducer 在 运行 计算时获取早期 map reduce 和第二个 mapper 的输出。我认为第一个 MapReduce 程序的输出可能太大而无法保存在分布式缓存中。任何指针都会有所帮助。我正在 Java.
中编写程序不,reducer 只能接受方法定义中定义的特定输入:
public void reduce(Key key, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
您最好的选择是编写一个新的 MapReduce 作业,该作业使用 MultipleInputs
转换先前 MapReduce 作业的输出(具有文本,可浮动写入)和其他映射器的输出(具有文本, 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