Mapreduce的执行流程思路

hadoop作为当今大数据学习的基础,其中最重要的组建mapreduce(即使引擎)是不可缺少的,他主要采用分而治之的思想,将一个整体大的文件,分解成多个小问题并行在不同的机器上去解决,在reudce端对个小问题的进行汇总,这就是mr

        mr的执行流程思路如下map端:1>读取数据,调用Textinputformat的Recordread方法,并将没一行文本一次解析成<k,v>的形式,k指的是每一行文本的偏移量,v指的是数据文本

                                                         2>对<k,v>的数据格式执行我们自己定义的map函数,转换的数据格式为<k1,v1>

                                                          3>将数据输出到环形缓冲区于中,环形缓冲区实际上就是一个数组,分为80%和20%的区域,在环形缓冲区先进行分区,并排序,当环形缓冲区的数据达到80%,会将数据溢写到磁盘,为多个小的磁盘文件

                                                           4>对磁盘的多个小文件进行归并排序,将小的文件合并成大的文件

                                         reduce端:1>在map端,每个map端的磁盘都有多个合并的大文件。下游的reduce端会去不同的map端去copy自己的数据,放到自己的工作磁盘,并进行再一次的归并排序

                                                         2>将拉取过来的数据执行网满自己定义的业务逻辑,将数据转换成<k2,v2>的格式

                                                         3>将该程序的数据结果调用Textinputformat 的write方法写到指定的路径或者系统

总上所诉:对该执行流程的几个重要的优化:

                                         1>开启必要的压缩机制,在压缩机制上面必须遵循是否可分割,压缩率,解压率等性能的考虑,一般有源数据进行压缩,map端的输出进行压缩,reduce端文件输出进行压缩

                                         2>开启并要的combiner机制,将相同key的value放在一起

                                        3>io.sort.mb,在环形缓冲区调节排序区域大小,减少spill的次数,.减少磁盘io

                                        4>io.sort.percent。map输出排序的阀值,默认是0.8

                                       5>io.sort.factor,对于map端的输出小文件,有多少个小文件进行一次归并排序,

                                      6>适当调节当map端完成任务的多少百分比,reduce开始从map端进行拉去数据(基于磁盘等性能考虑)                                            7>reduce端在拉去数据时候,应当一次性拉去多少数据(减少拉去次数。考虑磁盘io,redice端的磁盘大小等考虑)

猜你喜欢

转载自blog.csdn.net/w5201314ws6123/article/details/87895967