zoukankan      html  css  js  c++  java
  • 分组框架Hadoop框架排序和分组的理解

    查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!

        MapReduce框架会确保每个Reducer的输入都是按Key停止排序的。一般,将排序以及Map的输出传输到Reduce的过程称为混洗(shuffle)。每个Map都包含一个环形的缓存,默认100MMap首先将输出写到缓存当中。当缓存的内容达到“阈值”时(阈值默认的大小是缓存的80%),一个后台线程负责将结果写到硬盘,这个过程称为“spill”。Spill过程当中,Map仍可以向缓存写入结果,如果缓存已写满,那么Map停止等待。

        Spill的具体过程如下:首先,后台线程根据Reducer的个数将输出结果停止分组,每个分组对应一个Reducer。其次,对于每个分组后台线程对输出结果的Key停止排序。在排序过程当中,如果有Combiner函数,则对排序结果停止Combiner函数停止调用。每一次spill都会在硬盘发生一个spill文件。因此,一个Map task有可能会发生多个spill文件,当Map写出最后一个输出时,会将全部的spill文件停止合并与排序,输出终究的结果文件。在这个过程当中Combiner函数仍然会被调用。从整个过程来看,Combiner函数的调用次数是不确定的。

        每日一道理
    悲观的人,先被自己打败,然后才被生活打败;乐观的人,先战胜自己,然后才战胜生活。悲观的人,所受的痛苦有限,前途也有限;乐观的人,所受的磨难无量,前途也无量。在悲观的人眼里,原来可能的事也能变成不可能;在乐观的人眼里,原来不可能的事也能变成可能。悲观只能发生平庸,乐观才能造就卓绝。从卓绝的人那里,我们不难发现乐观的精神;从平庸的人那里,我们很容易找到阴郁的影子。

        Hadoop是如何停止排序的呢?根据笔者的理解,MapReduce的排序过程分为两个步骤,一个按照Key停止排序;一个是按照Key停止分组。这两部分分别由SortComparatorGroupingComparator来实现。具体的配置如下面黑体所示:

        job.setPartitionerClass(FirstPartitioner.class);

        job.setSortComparatorClass(KeyComparator.class);

        job.setGroupingComparatorClass(GroupComparator.class);

        如果用户想自定义排序方式,首先须要实现两个Comparator并将其按照下面的格式停止配置。每个Comparator须要继承WritableComparator基类。如下所示:

        public static class GroupComparator extends WritableComparator {

        protected GroupComparator() {

        super(IntPair.class, true);

        }

        @Override

        public int compare(WritableComparable w1, WritableComparable w2) {

        IntPair ip1 = (IntPair) w1;

        IntPair ip2 = (IntPair) w2;

        return IntPair.compare(ip1.getFirst(), ip2.getFirst());

        }

        }

    文章结束给大家分享下程序员的一些笑话语录: 祝大家在以后的日子里. 男生象Oracle般健壮; 女生象win7般漂亮; 桃花运象IE中毒般频繁; 钱包如Gmail容量般壮大, 升职速度赶上微软打补丁 , 追女朋友像木马一样猖獗, 生活像重装电脑后一样幸福, 写程序敲代码和聊天一样有**。

    --------------------------------- 原创文章 By
    分组和框架
    ---------------------------------

  • 相关阅读:
    反转链表 16
    CodeForces 701A Cards
    hdu 1087 Super Jumping! Jumping! Jumping!(动态规划)
    hdu 1241 Oil Deposits(水一发,自我的DFS)
    CodeForces 703B(容斥定理)
    poj 1067 取石子游戏(威佐夫博奕(Wythoff Game))
    ACM 马拦过河卒(动态规划)
    hdu 1005 Number Sequence
    51nod 1170 1770 数数字(数学技巧)
    hdu 2160 母猪的故事(睡前随机水一发)(斐波那契数列)
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3105161.html
Copyright © 2011-2022 走看看