[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。

 

posted @ 2015-03-03 21:16  风痕影默  阅读(591)  评论(0编辑  收藏  举报
友情链接:极限BT