您的位置:首页 > 大数据 > Hadoop

Apache Hadoop MapReduce Reducer类小解

2019-03-13 21:59 78 查看

1.ReduceTask

同mapper阶段类似,reduce阶段处理一个个reducetask,只不过mapper阶段mapper的map处理的是每一个切片的按行读取的数据。而reducetask的reduce处理的是每一个分区中每组数据的聚合汇总。

2.Reducer类

同样执行一个reducetask会调用一次run方法,而run方法则会调用

setup
,
reduce
cleanup
方法。其中setup和cleanup方法在此同样没有方法体代码。

setup方法(每一个分区中进行扥组汇总前调用一次,分区维度的)

protected void setup(Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT>.Context context) throws IOException, InterruptedException {
}

cleanup方法(同样是分区维度的调用,每一个分区内数据汇总完毕后才会调用一次)

protected void cleanup(Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT>.Context context) throws IOException, InterruptedException {
}

reduce方法

protected void reduce(KEYIN key, Iterable<VALUEIN> values, Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT>.Context context) throws IOException, InterruptedException {
Iterator var4 = values.iterator(); // 获取当前组中value的迭代器对象
while(var4.hasNext()) {
VALUEIN value = var4.next();
context.write(key, value);
}
}

由于reduce方法的调用频率是每组调用一次,所以reduce方法的key对应的是mapper阶段的key,而value则是每一个分区内该key的所有value值的一个迭代器。

而且,一般是Mapper的key类型和值的类型作为Reducer的输入key类型和输入value类型。而reduce的输出key和value的类型的话,通常是按照需求设计而定。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: