Apache Hadoop MapReduce Reducer类小解

1.ReduceTask

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

2.Reducer类

同样执行一个reducetask会调用一次run方法,而run方法则会调用setup,reducecleanup方法。其中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的类型的话,通常是按照需求设计而定。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值