• Hadoop学习之Combiner


      在Hadoop中,有一种处理过程叫Combiner,与Mapper和Reducer在处于同等地位,但其执行的时间介于Mapper和Reducer之间,其实就是Mapper和Reducer的中间处理过程,Mapper的输出是Combiner的输入,Combiner的输出是Reducer的输入。

    例如获取历年的最高温度例子,以书中所说的1950年为例,在两个不同分区上的Mapper计算获得的结果分别如下:

    第一个Mapper结果:(1950, [0, 10, 20])

    第二个Mapper结果:(1950, [25, 15])

    如果不考虑Combiner,按照正常思路,这两个Mapper的结果将直接输入到Reducer中处理,如下所示:

    MaxTemperature:(1950, [0, 10, 20, 25, 15])

    最终获取的结果是25。

    如果考虑Combiner,按照正常思路,这两个Mapper的结果将分别输入到两个不同的Combiner中处理,获得的结果分别如下所示:

    第一个Combiner结果:(1950, [20])

    第二个Combiner结果:(1950, [25])

    然后这两个Combiner的结果会输出到Reducer中处理,如下所示

    MaxTemperature:(1950, [20, 25])

    最终获取的结果是25。

    由上可知:这两种方法的结果是一致的,使用Combiner最大的好处是节省网络传输的数据,这对于提高整体的效率是非常有帮助的。

    但是,并非任何时候都可以使用Combiner处理机制,例如不是求历年的最高温度,而是求平均温度,则会有另一种结果。同样,过程如下,

    如果不考虑Combiner,按照正常思路,这两个Mapper的结果将直接输入到Reducer中处理,如下所示:

    AvgTemperature:(1950, [0, 10, 20, 25, 15])

    最终获取的结果是14。

    如果考虑Combiner,按照正常思路,这两个Mapper的结果将分别输入到两个不同的Combiner中处理,获得的结果分别如下所示:

    第一个Combiner结果:(1950, [10])

    第二个Combiner结果:(1950, [20])

    然后这两个Combiner的结果会输出到Reducer中处理,如下所示

    AvgTemperature:(1950, [10, 20])

    最终获取的结果是15。

    由上可知:这两种方法的结果是不一致的,所以在使用Combiner时,一定三思而后行,仔细思量其是否适合,否则可能造成不必要的麻烦。

  • 相关阅读:
    构建之法阅读笔记01
    软件工程个人作业01
    第一个PSP0级
    java实现课表的增加
    软件工程概论01
    异常处理
    流与文件课件课后作业1计算容量
    第九周课堂测试
    第八周动手动脑
    JAVA项目中常用的异常知识点总结
  • 原文地址:https://www.cnblogs.com/baolebei/p/3836696.html
Copyright © 2020-2023  润新知