从零开始大数据【1.4】-- mapreduce中的排序+自定义WritableComparable

从零开始大数据【1.4】-- mapreduce中的排序+自定义WritableComparable

1 上期回顾:

第二节中,我们定义了一个新的数据类型作为mapreduce中的数据类型,当时把这个数据类型当做value值,所以没有涉及到排序,现在我们准备将他作为key值,所以来写它的WritableComparable。

2 mapreduce中的排序

排序是 MapReduce 框架中最重要的操作之一。Map Task和 Reduce Task均会对数据(按照 key)进行排序。该操作属于 Hadoop 的默认行为。任何应用程序中的数据均会被排序,而不管逻辑上是否需要。默认排序是按照字典顺序排序,实现该排序的方法是快速排序。
对于 Map Task,它会将处理的结果暂时放到一个缓冲区中,当缓冲区使用率达到一定阈值后,再对缓冲区中的数据进行一次排序,并将这些有序数据写到磁盘上,而当数据处理完毕后,它会对磁盘上所有文件进行一次合并,以将这些文件合并成一个大的有序文件。
对于 Reduce Task,它从每个 Map Task上远程拷贝相应的数据文件,如果文件大小超过一定阈值,则放到磁盘上,否则放到内存中。如果磁盘上文件数目达到一定阈值,则进行一次合并以生成一个更大文件;如果内存中文件大小或者数目超过一定阈值,则进行一次合并后将数据写到磁盘上。当所有数据拷贝完毕后,Reduce Task 统一对内存和磁盘上的所有数 据进行一次合并。
可以看到,对key的排序多次出现在mapreduce程序中,接下来就来说怎么自定义排序的方式。

3 实际案例

仍然采用之前的数据集,这一次,希望输出的结果是按照reviews的数量排序输出的,为了完成这个目的,首先要在自定义的bean对象中添加WritableComparable。

4 编写bean对象

主要是变成implements WritableComparable并且重写了compareTo方法。

        package appmapreduce;
    
    import java.io.DataInput;
    import java.io.DataOutput;
    import java.io.IOException;
    
    import org.apache.hadoop.io.Writable;
    import org.apache.hadoop.io.WritableComparable;
    
    public class nbean implements WritableComparable<nbean>{
   
    	
    	private long reviews;	
    	private double rating;
    	
    	
    	//空参构造(在source中 generate construct using fields)
    	public nbean() {
   
    		super();
    	}

    	public nbean(long reviews,  double rating) {
   
    		super();
    		this.reviews = reviews;		
    		this.rating = rating;	
    	}
    
    	@Override
    	public String toString() {
   
    		return reviews +"\t"+rating;
    	}
    
    	//反序列化方法
    	@Override
    	public void readFields(DataInput in) throws IOException {
   
    		// TODO Auto-generated method stub

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值