MapReduce工作原理简介

    由于工作后的第一个任务就是使用Hadoop进行大量的数据处理,其中使用的MapReduce计算框架,这里就简单做了一些总结,网上也有很多大神的总结,这里就当作自己的一个小小积累了。

1.概述

    MapReduce采用的是“分而治之”的数据,当我们处理大规模的数据时,将这些数据拆解成多个部分,并利用集群的多个节点同时进行数据处理,然后将各个节点得到的中间结果进行汇总,经过进一步的计算(该计算也是并行进行的),得到最终结果。

map:任务拆解,

reduce:map的结果整合

2.工作过程

MapReduce分成两个阶段Map阶段和Reduce阶段

Map阶段:

1.1.读取hdfs中的文件,然后进行分片(split),每一个分片对应一个Map任务,至于如何分片呢?默认情况下,每一个分片的大小就是hdfs的blocksize,Hadoop2.X,为128M,分片大小也是可以调整的,具体可以参考 这位大神的博客 

大数据学习(5)MapReduce切片(Split)和分区(Partitioner)

1.2.读取的文件,每一行为健值对<k1,v1>,调用一次map函数,map函数按照业务逻辑进行编写,处理后,得到新的健值对<k2,v2>。

1.3.根据reduce的数量,默认对k2哈希,对<k2,v2>进行分区(partition),同时也可以自定义分区函数。

1.4.对各个分区内的数据根据k2进行排序和分组,比如同一个分区<apple,1>,<apple,2>,<banana,1>,分组后为<apple,{1,2}>,<banana,1>

1.5.对同一个map任务出来的<k2,v2>进行combine,比如<apple,{1,2}> => <apple,3>,这个combine是可以选的。

reduce阶段:

2.1.将所有节点同一个分区的map数据,通过网络拉取(copy)到同一个reduce节点。从map输出数据到reduce读取数据到过程叫做shuffle

2.2.然后按照k进行排序,同一个k的数据通过reduce函数进行计算,完成业务逻辑,结果输出新的<k3,v3>。

2.3.最后将<k3,v3>结果入到hdfs。

3.总结

map;

1)split分片,健值对<k,v>

2)mapper计算

3)partitioner

4)sort

5)combiner(可选)

shuffle

map输出数据,根据分区copy到同一个reduce,reduce读取数据

reduce:

1)sort

2)reducer

3)output到hdfs


猜你喜欢

转载自blog.csdn.net/sinat_27634939/article/details/80149677