MapReduce--排序

Shuffle中的排序方式

第一种:自定义排序器,优先级最高

job.setSortComparatorClass(null);//自定义排序的方式
  • 需求:将Wordcount的结果按照key降序排序
    Shuffle过程中会调用Key的compara方法,默认对key升序
  • 第一步:构建一个排序器【比较器】
    • 无参构造:注册允许强转,构建示例
    • 重写比较的方法
package bigdata.hanjiaxiaozhi.cn.mr.usersort;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.io.WritableComparator;

/**
 * @ClassName UserSort
 * @Description TODO 用于自定义的排序器:就是提供一个比较器的方法
 * @Date 2020/6/1 10:22
 * @Create By     hanjiaxiaozhi
 */
public class UserSort extends WritableComparator {

    /**
     * 允许将WritableComparable类型强转为Text类型
     * 注册
     */
    public UserSort(){
        super(Text.class,true);
    }


    /**
     * 将两个WritableComparable的对象 进行比较
     * @param a
     * @param b
     * @return
     */
    @Override
    public int compare(WritableComparable a, WritableComparable b) {
        //将两个对象,转为我们需要比较的对象类型
        Text o1 = (Text) a;
        Text o2 = (Text) b;
        //默认是升序,需求是降序
        return -o1.compareTo(o2);
    }
}
  • 第二步:配置使用自定义的排序器
job.setSortComparatorClass(UserSort.class);//自定义排序的方式

第二种:调用类型自带的排序的方法,如果没有设置第一种,则使用第二种

comparaTo

详细参考自定义数据类型之方式二:构建一个JavaBean实现WritableComparable接口
程序中 :两个必须要有一个,用于Shuffle中的排序,如果两种都没有,就会抛出异常,就会报错,无法构建集合

两种干预Shuffle中排序的方式的应用场景

  • 第一种:适合于Key是Hadoop提供的类型,不想用Hadoop提供的排序的方式
  • 第二种:适合于自定义数据类型时,自己指定排序比较的方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值