5 mapreduce的组合,排序,分组

mapreduce的组合,排序,分组在使用mapreduce处理数据时,总有种“简单,粗暴”的感觉,就像一个傻大个一样。为了能更加灵活的处理分析数据,以及将这个傻大个使用的更加得心应手,今天总结下这位傻大个在处理数据时使用的自身的一些组件。1.combiner(组合)当然可能大家已经非常熟知了,我在这里就不卖弄了,简单的解释一下使用它的优势,为大家灌个耳音,combiner的作用是组合map阶段生成
摘要由CSDN通过智能技术生成

mapreduce的组合,排序,分组

在使用mapreduce处理数据时,总有种“简单,粗暴”的感觉,就像一个傻大个一样。

为了能更加灵活的处理分析数据,以及将这个傻大个使用的更加得心应手,今天总结下这位傻大个在处理数据时使用的自身的一些组件。

1.combiner(组合)

当然可能大家已经非常熟知了,我在这里就不卖弄了,简单的解释一下使用它的优势,为大家灌个耳音,

combiner的作用是组合map阶段生成的数据,是好像说的根reduce一样,不同点在于它只组合一个map task产生的数据。给大家上一张盗过来的图。

这里写图片描述

是不是一下子就明白了呀。

举个更直观的例子吧:还记得我们的 单词统计demo吗?假如现在在map阶段 mapreduce读取到下面这一行数据

hello hello hello hello world

直接使用了例子中的那种解决办法,那么在map阶段将生产如下数据

<hello,1> <hello,1> <hello,1> <hello,1> <world,1>

那么到了reduce阶段 mapreduce会将这些数据从各个节点上收集起来,那么每收集一次就需要一次网络传输,这个是不是也太奢侈了。

那么咋们的 combiner 就配上用场了,combiner的作用就是在map和reduce阶段加入了组合功能,那么应用上面的例子中,combiner会将上面产生的数据做如下整理

<hello,4> <world,1>

一下子清爽多了,是不是。这样可以大大提高网络传输效率。在理解combiner时,只需理解,combiner的整理(组合)发生在一个map task就已经将他摸清楚了。

2.comparable(比较)

comparable 的用途在于,对mapreduce中传输的数据做比较操作,我们可以使用它对mapreduce处理的数据做排序处理,在使用的过程中我们一般是继承 WritableComparable 类 来自定义我们自己的比较规则用法和我们在jdk中使用的 Comparable 接口一样,WritableComparable就是继承了该接口,此处不再累赘,直接上代码了。

public class Channel implements WritableComparable<Channel>{

    private int id;
    private String channel;
    private String url;
    private Date addTime;
    private String ip;
    private int glance;
    private int regist;
    private String mac;

    、、、、set get

    @Override
    public void readFields(DataInput in) throws IOException {
        this.id=in.readInt();
        this.channel=in.readUTF();
        this.url=in.readUTF();
        this.addTime=new
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值