总的理解:
Hadoop 当中的 MapReduce 是一个分布式程序运算框架。
主要思想理念:
分而治之。它分为map个reduce两个阶段。而界于map和reduce阶段还有一个很重要的过程数shuffle。接下来我们再一一细讲。主要思想理念:分而治之。
拆解:
map端:
1.分即是MapReduce中的map阶段,将数据分片,格式化为多个(K,V)键值对的块。然后按块启动多个maptask。
shuffle:
2.MapTask收集我们的map()方法输出的kv键值对对,放到内存缓冲区中。这也意味着shuffle过程开始了。环形缓冲区的内存一般是100M,默认当数据写到80%时开始反向溢写。而原本已经进来的这80%的数据,首先进行分区,然后分区内排序,并且选择性的combine(如有设置的话),最后写出到磁盘。因为shuffle的环形缓冲区大小会影响MR的效率,所以可以适当的调大,90%等。
3.当maptask任务都完成溢出后,会对磁盘中这个map任务产生的所有临时文件(spill文件)进行归并(merge)操作生成最终的正式输出文件,此时的归并是将所有spill文件中的相同partition合并到一起。并对各个partition中的数据再进行一次排序(sort),生成key和对应的value-list。接下来等待reduce task来拉取数据。
reduce阶段:
每个分区对应的reducetask,拉取相同分区的所有输出,进行归并排序排序,然后执行reduce()方法,对数据累加,输出到hdfs上
MapReduce,shuffle的理解,精简
于 2020-07-22 16:51:43 首次发布