zoukankan      html  css  js  c++  java
  • [hadoop]mapreduce原理简述

    1、用于map的输入,先将输入数据切分成相等的分片,为每一个分片创建一个map worker,这里的切片大小不是随意订的,一般是与HDFS块大小一致,默认是64MB,一个节点上存储输入数据切片的最大size就是HDFS的块大小,当设置的切片size大于HDFS块大小,会引起节点之间的传输,占用带宽。

    2、map worker调用用户编写的map函数对每个分片进行处理,并且将处理结果输出到本地存储(非HDFS)

    3、对map的输出进行combiner操作,这里的的combiner主要是减少map与reduce之间的数据传输量,不是必须的步骤,可以例举一个《hadoop: the definitive guide》中的例子求最大温度的处理。

      Fir Map Output:

        (1950, 0)

        (1950, 20)

        (1950, 10)

      Sec Map Output:

        (1950, 25)

        (1950, 15)

    在不调用combiner的情况下,是将map的输出数据都将传送到reduce那里,在reduce处理时,将会将如下数据作为输入:

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

    在调用combiner的情况下,现在每个map本地对输出数据进行处理(即将当前的map的最大温度求出),然后再传输给reduce,如下:

      Fir Map Combined:

        (1950, 20)

      Sec Map Combined:

        (1950, 25)

    而此时reduce将会用如下数据作为输入,从而map与reduce之间的数据传输量得到降低:

        (1950, [20, 25])

    4、将combiner处理后的数据或者map的输出数据进行shuffle处理,所谓的shuffle处理是将数据中的记录通过partition操作映射到reduce中,从而保证每个reduce处理的是相同key的记录。注意partition函数可以进行自定义,也可以使用默认的partition函数,默认的partition是利用一个hash映射操作将相同key的记录映射到相同的reduce.

    5、reduce调用用户定义的reduce函数对数据进行处理,输出存入HDFS。

  • 相关阅读:
    CListCtrl 显示图片及大批量数据的加载速度与闪烁问题
    iPhone开发数组基本用法NSArray与NSMutableArray
    iPhone开发 让viewDidAppear/viewWillAppear 在页面加载前始终调用
    iPhone开发 SDK新手必读
    iPhone开发内存管理
    AfxEnableControlContainer has not been called yet
    ftp上传文件bat脚本
    struts2学习基础配制
    windows server 2008 R2忘记administrator密码
    linux cifs自动挂载远程windows硬盘或文件夹
  • 原文地址:https://www.cnblogs.com/fantasy01/p/4311941.html
Copyright © 2011-2022 走看看