Hadoop源码分析:Comparator的获取

本文深入分析了Hadoop MapReduce中Key的排序机制,详细讲解了Key类比较器的获取过程,包括从配置、默认比较器到自定义比较器的创建。MapReduce的排序涉及到Mapper和Reducer端,对于自定义Key类,需要实现WritableComparable接口以确保可排序性。
摘要由CSDN通过智能技术生成

目录

一、MapReduce中的排序

二、问题的引入

三、源码解析

四、总结


排序是MapReduce框架中最重要的操作之一。MapTask和ReduceTask均会对数据Key进行排序,该操作是Hadoop的默认行为。不管逻辑是否需要,MapReduce程序中的Key值都会进行排序。

一、MapReduce中的排序

MapReduce程序中都有哪些排序呢?下图为Mapreduce程序的执行流程图。如图所示,内部排序分为Mapper端的快速排序和归并排序,以及Reducer端的归并排序。

二、问题的引入

如上分析可知,排序在Mapper端和Reducer端都会执行。那么既然要排序,就需要Key类对象之间能够比较,那么MapReduce程序中Key类的比较器是如何获得的呢?

总体来说Key类的比较器的获取可以用下图表示,以阶段1、阶段2、阶段3三个阶段划分并在源码解析中解释。

三、源码解析

MapTask在创建缓冲区时,会获取Key的比较器对象,源代码①为MapperTask内部类OutputBuffer的init方法。

//源码①
comparator = job.getOutputKeyComparator();

上述的方法会调用到Jobconf类,试图从该类中获得比较器。源码②如下:

//源码② 
 public RawComparator getOutputKeyComparator() {
    Class&
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值