最新国产好看的视频,伊人天堂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端)源碼分析,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

源碼中有這樣一段代碼

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

public RawComparator getOutputKeyComparator() {
  // 獲取mapreduce.job.output.key.comparator.class,必須是RawComparator類型,如果沒(méi)設(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)情況,用戶是沒(méi)用自定義這個(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,重寫(xiě)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類型
// 如果沒(méi)用設(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é)

以上就是這篇文章的全部?jī)?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)用程序來(lái)說(shuō),熱部署就是在運(yùn)行時(shí)更新Java類文件。在基于Java的應(yīng)用服務(wù)器實(shí)現(xiàn)熱部署的過(guò)程中,類裝入器扮演著重要的角色。大多數(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)聽(tīng)說(shuō)過(guò) Java 9 的模塊系統(tǒng),但是這個(gè)新版本還有許多其它的更新。 這里有九個(gè)令人興奮的新功能將與 Java 9 一起發(fā)布。需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。
    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)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • SpringBoot 改造成https訪問(wèn)的實(shí)現(xiàn)

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

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

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

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

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

    這篇文章主要介紹了Mybatis分頁(yè)插件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ī)名配置、端口開(kāi)通、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è)簡(jiǎn)單的SpringBoot項(xiàng)目快速搭建詳細(xì)步驟

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

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

最新評(píng)論

盐津县| 棋牌| 东明县| 连城县| 鄂托克旗| 佛教| 南陵县| 手游| 衡阳县| 中超| 康保县| 舒城县| 永顺县| 巴彦淖尔市| 韩城市| 漳州市| 石渠县| 克什克腾旗| 舟曲县| 延吉市| 吕梁市| 吐鲁番市| 诸城市| 万州区| 微博| 宁强县| 鄂伦春自治旗| 澜沧| 花莲市| 临泽县| 广州市| 安庆市| 合作市| 永安市| 沈阳市| 平乡县| 临泉县| 泽库县| 交口县| 孝昌县| 玉田县|