大数据笔记 3--MapReduce工作流程

版权声明:转载附链接并联系 https://blog.csdn.net/BigCabbageFy/article/details/82888275

在这里插入图片描述

详细步骤:

1、客户端会提交相应的切片、jar包、配置文件信息到Yarn上,Yarn上的AppMater会为mapreduce申请相应的资源;

2、AppMater根据相关信息计算给mapreduce程序分配出几个MapTask资源。

3、 MapTask会利用InputFormat中的recorderReader将待处理的文本分割成<k,v>键值对的形式,然后根据用户自定义的Map方法进行逻辑计算输出到collector;

4、collector中有一个环形缓冲区(默认内存为100M),它从中一分为二,一边存储着<k,v>键值对数据,另一边存储着这些数据的索引,当环形缓冲区的存储值达到容量的80%时,会发生溢写并在另一端反向写入,这样做的好处就是可以源源不断的向其中写入数据,而不必在开辟其他空间,大大提高执行效率。

5、溢写过程中会产生分区,每个分区内的数据会进行一次快速排序,将分区内的数据按字典顺序排列。

6、每次溢写会产生一个小文件,进而生成多个小文件,在这个过程中可能会发生combiner(这是用户可选的),combiner的作用就是将key相同的键值对进行一个合并,相当于聚合操作,也等同于一个小的reducer。这样做到好处就是减少了Map端到reduce端的传输量。

7、此阶段会发生合并文件及归并排序,目的是将不同文件中相同分区内的数据按照顺序放在一个分区中,并将多个小文件合并成一个大文件,方便传输到reduce端;

8、reduce端会将所有map端属于自己分区的文件拷贝到自己的服务端;

9、拷贝过来的文件会发生一次合并然后进行归并排序,目的是将所有key相同的数据放在一起,好进行reducer()方法,此过程中还可能发生分组也是用户自定义项,用的场景不多,这里就不多做解释;

10、这里会将key相同的一组数据放入reducer()方法中进行用户自定义的聚合操作;

11、处理后的文本会由OutputFormat中的recorderWrite写入文件落入磁盘中。

到此整个MapReduce程序的运行机制就算完成了。

猜你喜欢

转载自blog.csdn.net/BigCabbageFy/article/details/82888275