MapReduce执行流程与内存缓冲机制精解.pdfVIP

  • 0
  • 0
  • 约2.49千字
  • 约 3页
  • 2026-01-23 发布于北京
  • 举报

MapReduce执行流程与内存缓冲机制精解.pdf

MapReduce的执行过程

步骤:

①首先对输入数据源进行切片;

②Master调度worker执行map任务;

③Worker输入源片段;

④Worker执行map任务,将任务输出保存在本地;

⑤Master调度worker执行reduce任务,reduceworkermap任务的输出

文件;

⑥执行reduce任务,将任务输出保存到HDFS.

合并到磁盘

内存缓冲区

Map端的情况

整个流程分为四步:每个maptask都有一个内存缓冲区,着map的输出结果;当缓冲

区快满的时候需要将缓冲区的数据已一个临时文件的方式存放到磁盘,当整个maptask结束

后再对磁盘中的这个maptask产生的所有临时文件做合并,生成最终的正式输出文件,然后

等待reducetask来处理。

1)经过mapper的运行后,我们得到的mapper输出是一个key/value对,那

对于输出的结果应该交给哪个reduce去做呢????然而MapReduce

Partition接口,它的作用就是根据key或value及reduce的数量来决定当

前的这对输出数据最终应该交给哪个reducetask处理。默认对keyhash

以后再以reducetask数量取模,默认的取模方式就是为了平均reduce的

处理能力。将数据交给reduce处理后,接下来就需要将数据写入内存缓冲

区中,缓冲区的作用就是批量收集map结果,减少磁盘的IO的影响。我

们的key/value对以及partition的结果都会被写入内存缓冲区,这个内存

缓冲区的大小是有限制的,默认是100MB。当maptask的输出结果很多

时,就有肯能内存,所以一定条件下将缓冲区的数据临时写入磁盘,

然后重新利用这块缓冲区。这个从内存写入磁盘的过程被称为spill,也就

是溢出。这个溢写是有单独线程来完成,不影响往缓冲区写map结果的线

程。溢写线程启动时不应该map的结果输出,所以整个缓冲区有一个

溢写的比例spill.percent。这个比例默认是0.8,也就是当缓冲区的数据达

到阀值时,溢写线程开始启动,锁定这80MB的内存,执行溢写过程。Map

task的输出结果可以往剩下的20MB内存中写,互不影响。

2)每次溢写在磁盘上生成溢写文件,如果map的输出结果真的很大,就会有

多次这样的溢写发生,磁盘上相应就会有很多个溢写的文件存在。当map

task真正完成时,内存缓冲区中的数据也会全部溢写到磁盘中形成一个溢

写文件。最终磁盘中至少有一个这样的溢写文件存在(如果map的输出结

果很少,map执行完成时,只会产生一个溢写文件),因为最终的文件只

有一个,所以需要将这些溢出的文件归并到一起,这个过程叫做merge。

文档评论(0)

1亿VIP精品文档

相关文档