亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

shuffle的關(guān)鍵階段sort(Map端和Reduce端)源碼分析

 更新時間:2019年01月10日 11:14:02   作者:qq_43193797  
今天小編就為大家分享一篇關(guān)于shuffle的關(guān)鍵階段sort(Map端和Reduce端)源碼分析,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

源碼中有這樣一段代碼

1. Map端排序獲取的比較器

public RawComparator getOutputKeyComparator() {
  // 獲取mapreduce.job.output.key.comparator.class,必須是RawComparator類型,如果沒設(shè)置,是null
  Class<? extends RawComparator> theClass = getClass(
   JobContext.KEY_COMPARATOR, null, RawComparator.class);
  // 如果用戶自定義了這個參數(shù),那么實例化用戶自定義的比較器
  if (theClass != null)
   return ReflectionUtils.newInstance(theClass, this);
  // 默認情況,用戶是沒用自定義這個參數(shù)
  // 判斷Map輸出的key,是否是WritableComparable的子類
 //  如果是,調(diào)用當前類的內(nèi)部的Comparator!
  return WritableComparator.get(getMapOutputKeyClass().asSubclass(WritableComparable.class), this);
 }

總結(jié): 如何對感興趣的數(shù)據(jù)進行排序?

             ① 數(shù)據(jù)必須作為key

             ② 排序是框架自動排序,我們提供基于key的比較器,也就是Comparator,必須是RawComparator類型

                            a) 自定義類,實現(xiàn)RawComparator,重寫compare()

                                          指定mapreduce.job.output.key.comparator.class為自定義的比較器類型

                            b)key實現(xiàn)WritableComparable(推薦)

              ③ 實質(zhì)都是調(diào)用相關(guān)的comparaTo()方法,進行比較

2. Reduce端進行分組的比較器

RawComparator comparator = job.getOutputValueGroupingComparator();
// 獲取mapreduce.job.output.group.comparator.class,必須是RawComparator類型
// 如果沒用設(shè)置,直接獲取MapTask排序使用的比較器
// 也是比較key
public RawComparator getOutputValueGroupingComparator() {
  Class<? extends RawComparator> theClass = getClass(
   JobContext.GROUP_COMPARATOR_CLASS, null, RawComparator.class);
  if (theClass == null) {
   return getOutputKeyComparator();
  }
  // 如果設(shè)置了,就使用設(shè)置的比較器
  return ReflectionUtils.newInstance(theClass, this);
 }

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • Java反射簡易教程

    Java反射簡易教程

    這篇文章主要介紹了Java反射簡易教程,小編覺得挺不錯的,這里分享給大家,需要的朋友可以參考。
    2017-11-11
  • Mybatis分頁插件PageHelper手寫實現(xiàn)示例

    Mybatis分頁插件PageHelper手寫實現(xiàn)示例

    這篇文章主要為大家介紹了Mybatis分頁插件PageHelper手寫實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 通過實例解析POJO和JavaBean的區(qū)別

    通過實例解析POJO和JavaBean的區(qū)別

    這篇文章主要介紹了通過實例解析POJO和JavaBean的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • JMX監(jiān)控的具體使用

    JMX監(jiān)控的具體使用

    JMX最常見的場景是監(jiān)控Java程序的基本信息和運行情況,本文主要介紹了JMX監(jiān)控的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • 如何使用Java調(diào)用Spark集群

    如何使用Java調(diào)用Spark集群

    這篇文章主要介紹了如何使用Java調(diào)用Spark集群,我搭建的Spark集群的版本是2.4.4,本文結(jié)合示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 淺談一下Java中的訪問修飾符以及作用

    淺談一下Java中的訪問修飾符以及作用

    這篇文章主要介紹了淺談一下Java中的訪問修飾符以及作用,修飾符修飾的是“被訪問”的權(quán)限,所有修飾符都可以修飾成員變量,方法,構(gòu)造方法,需要的朋友可以參考下
    2023-05-05
  • 詳解Java中信號量Semaphore的使用

    詳解Java中信號量Semaphore的使用

    在Java中,正確地管理并發(fā)是一件既挑戰(zhàn)又有趣的事情,當談到并發(fā)控制,就不得不說Java中的一個非常強大的工具,就是Semaphore,下面我們就來看看Java中信號量Semaphore的具體使用吧
    2024-01-01
  • idea使用easyCode生成代碼(根據(jù)mybatis-plus模板創(chuàng)建自己的模板)

    idea使用easyCode生成代碼(根據(jù)mybatis-plus模板創(chuàng)建自己的模板)

    本文主要介紹了idea使用easyCode生成代碼,easyCode代碼生成器可以減少低價值搬磚,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • java Person,Student,GoodStudent 三個類的繼承、構(gòu)造函數(shù)的執(zhí)行

    java Person,Student,GoodStudent 三個類的繼承、構(gòu)造函數(shù)的執(zhí)行

    這篇文章主要介紹了java Person,Student,GoodStudent 三個類的繼承、構(gòu)造函數(shù)的執(zhí)行,需要的朋友可以參考下
    2017-02-02
  • SpringBoot2.6.3集成quartz的方式

    SpringBoot2.6.3集成quartz的方式

    quartz是java里頭定時任務(wù)的經(jīng)典開源實現(xiàn),這里講述一下如何在SpringBoot2.6.3集成quartz,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-02-02

最新評論