gpt4 book ai didi

shuffle的关键阶段sort(Map端和Reduce端)源码分析

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章shuffle的关键阶段sort(Map端和Reduce端)源码分析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

源码中有这样一段代码 。

1. map端排序获取的比较器 。

?
1
2
3
4
5
6
7
8
9
10
11
12
public rawcomparator getoutputkeycomparator() {
   // 获取mapreduce.job.output.key.comparator.class,必须是rawcomparator类型,如果没设置,是null
   class <? extends rawcomparator> theclass = getclass(
    jobcontext.key_comparator, null , rawcomparator. class );
   // 如果用户自定义了这个参数,那么实例化用户自定义的比较器
   if (theclass != null )
    return reflectionutils.newinstance(theclass, this );
   // 默认情况,用户是没用自定义这个参数
   // 判断map输出的key,是否是writablecomparable的子类
  //  如果是,调用当前类的内部的comparator!
   return writablecomparator.get(getmapoutputkeyclass().assubclass(writablecomparable. class ), this );
  }

总结: 如何对感兴趣的数据进行排序?

             ① 数据必须作为key 。

             ② 排序是框架自动排序,我们提供基于key的比较器,也就是comparator,必须是rawcomparator类型 。

                            a) 自定义类,实现rawcomparator,重写compare() 。

                                          指定mapreduce.job.output.key.comparator.class为自定义的比较器类型 。

                            b)key实现writablecomparable(推荐) 。

              ③ 实质都是调用相关的comparato()方法,进行比较 。

2. reduce端进行分组的比较器 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
rawcomparator comparator = job.getoutputvaluegroupingcomparator();
// 获取mapreduce.job.output.group.comparator.class,必须是rawcomparator类型
// 如果没用设置,直接获取maptask排序使用的比较器
// 也是比较key
public rawcomparator getoutputvaluegroupingcomparator() {
   class <? extends rawcomparator> theclass = getclass(
    jobcontext.group_comparator_class, null , rawcomparator. class );
   if (theclass == null ) {
    return getoutputkeycomparator();
   }
   // 如果设置了,就使用设置的比较器
   return reflectionutils.newinstance(theclass, this );
  }

总结 。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我的支持。如果你想了解更多相关内容请查看下面相关链接 。

原文链接:https://blog.csdn.net/qq_43193797/article/details/86019761 。

最后此篇关于shuffle的关键阶段sort(Map端和Reduce端)源码分析的文章就讲到这里了,如果你想了解更多关于shuffle的关键阶段sort(Map端和Reduce端)源码分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com