最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

源碼中有這樣一段代碼

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);
  // 如果用戶自定義了這個(gè)參數(shù),那么實(shí)例化用戶自定義的比較器
  if (theClass != null)
   return ReflectionUtils.newInstance(theClass, this);
  // 默認(rèn)情況,用戶是沒用自定義這個(gè)參數(shù)
  // 判斷Map輸出的key,是否是WritableComparable的子類
 //  如果是,調(diào)用當(dāng)前類的內(nèi)部的Comparator!
  return WritableComparator.get(getMapOutputKeyClass().asSubclass(WritableComparable.class), this);
 }

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

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

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

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

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

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

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

2. Reduce端進(jìn)行分組的比較器

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)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • 深入學(xué)習(xí)Java 熱部署的知識(shí)

    深入學(xué)習(xí)Java 熱部署的知識(shí)

    對(duì)于Java應(yīng)用程序來說,熱部署就是在運(yùn)行時(shí)更新Java類文件。在基于Java的應(yīng)用服務(wù)器實(shí)現(xiàn)熱部署的過程中,類裝入器扮演著重要的角色。大多數(shù)基于Java的應(yīng)用服務(wù)器,包括EJB服務(wù)器和Servlet容器,都支持熱部署。,需要的朋友可以參考下
    2019-06-06
  • 深入講解Java 9中的九個(gè)新特性

    深入講解Java 9中的九個(gè)新特性

    Java 8 發(fā)布三年多之后,即將快到2017年7月下一個(gè)版本發(fā)布的日期了。 你可能已經(jīng)聽說過 Java 9 的模塊系統(tǒng),但是這個(gè)新版本還有許多其它的更新。 這里有九個(gè)令人興奮的新功能將與 Java 9 一起發(fā)布。需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-05-05
  • Quarkus中ConfigSourceInterceptor的加密配置實(shí)現(xiàn)

    Quarkus中ConfigSourceInterceptor的加密配置實(shí)現(xiàn)

    這篇文章主要為大家介紹Quarkus中ConfigSourceInterceptor加密配置的實(shí)現(xiàn)方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • SpringBoot集成drools的實(shí)現(xiàn)示例

    SpringBoot集成drools的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot集成drools的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • SpringBoot 改造成https訪問的實(shí)現(xiàn)

    SpringBoot 改造成https訪問的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot 改造成https訪問的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 教你如何用Jenkins自動(dòng)化部署項(xiàng)目(從零到搭建完成)

    教你如何用Jenkins自動(dòng)化部署項(xiàng)目(從零到搭建完成)

    這篇文章主要介紹了教你如何用Jenkins自動(dòng)化部署項(xiàng)目(從零到搭建完成),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Mybatis分頁插件Pagehelper的PageInfo字段屬性使用及解釋

    Mybatis分頁插件Pagehelper的PageInfo字段屬性使用及解釋

    這篇文章主要介紹了Mybatis分頁插件Pagehelper的PageInfo字段屬性使用及解釋,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java JDBC連接Kerberos認(rèn)證的HIVE和Impala方式

    Java JDBC連接Kerberos認(rèn)證的HIVE和Impala方式

    本文主要介紹了HiveJDBC和ImpalaJDBC的使用方法,包括版本對(duì)應(yīng)、Maven安裝、主機(jī)名配置、端口開通、JDBC連接和Kerberos認(rèn)證等
    2025-02-02
  • Java常用加密算法實(shí)例總結(jié)

    Java常用加密算法實(shí)例總結(jié)

    這篇文章主要介紹了Java常用加密算法,結(jié)合實(shí)例形式總結(jié)分析了base64、md5、sha、rsa、des等加密算法實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • 一個(gè)簡單的SpringBoot項(xiàng)目快速搭建詳細(xì)步驟

    一個(gè)簡單的SpringBoot項(xiàng)目快速搭建詳細(xì)步驟

    Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程,下面這篇文章主要給大家介紹了一個(gè)簡單的SpringBoot項(xiàng)目快速搭建詳細(xì)步驟,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08

最新評(píng)論

商丘市| 微山县| 葵青区| 德清县| 山东| 贵港市| 钟山县| 绥化市| 新安县| 伽师县| 绿春县| 宜城市| 化州市| 永兴县| 青冈县| 宁强县| 怀柔区| 永康市| 阿拉尔市| 林芝县| 什邡市| 周宁县| 玉门市| 洞头县| 建水县| 定州市| 万源市| 大丰市| 永兴县| 修文县| 河池市| 万源市| 景泰县| 车险| 通化市| 杭锦后旗| 中方县| 胶州市| 巨野县| 乡城县| 开原市|