读书笔记-Hadoop大数据shuffle

       想要说起shuffle,先从整体的流程说起,shuffle包括也就是对map端的数据处理,依次进行分区,排序,切割,然后在reduance端进行merger在排序向reduce发送数据,这就是shuffle的一个整体流程。

       那么在细致一点根据源码说的的话,map端输出数据会由collector端进行处理,也就是调用collect函数,首先呢map端会将输出数据写出到内存环里,等到内存环达到了一定的阈值,那么就会触发将数据写入磁盘,由于内存环写入磁盘的过程中,map端还是会向环写入数据的,所以呢如果写出速度小于写入速度的话,map端就会等待。在collect函数将数据写出后会调用sortandsplit函数,每被调用一次就会生成一个spill文件,然后按照key值对需要写出的数据进行排序,最后根据partition顺序将所有的数据写入到spill文件里,如果要是设置了combine类的话 ,就会先调用combiner类中的combineandsort方法,对结果进行进一步的合并,在排序,在分发到reduce端。这样map端会生成很多的spill文件,这个时候会先merger这些文件后在交给reduce处理,这也就是map端的shuffle。

      下面进行reduce端的shuffle,reduce端整体流程为复制map端输出,排序合并,reduce处理。

       reduce端会定时向jobtracker获取map端的输出位置,一旦获取到位置就会复制tobtracker的数据到本地,如果数据小就到内存中,如果数据大就到磁盘,与此同时的进行meger操作并维持原来的顺序,最后交给reduce处理到hdfs上。

       

猜你喜欢

转载自www.cnblogs.com/chunqiu0123/p/11718697.html