MapReduce Shuffle中的溢写阶段疑问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MapReduce Shuffle中的溢写阶段疑问相关的知识,希望对你有一定的参考价值。

MapReduce Shuffle中溢写到本地磁盘的操作,它会设置一个阈值,默认是80%,想问下是不是最终不管有没有达到这个设定的阈值它都会触发溢写操作?比如运行一个wordcount,测试的文件数据就几行单词,这都没达到100MB内存中的80%,最终程序仍然是运行完成的,在这边有些疑惑

不会触发溢写,MapTask执行完成直接生成最终文件finalout 参考技术A 1、What is this?2、Are there noses or mouths?3、C4、B

Spark的shuffle和MapReduce的shuffle对比

参考技术A

shuffle阶段划分

Map阶段和Reduce阶段

任务

MapTask和ReduceTask

shuffle过程

Map阶段shuffle:分区->排序->合并

①数据从环形缓冲区溢写到磁盘前,需要先进行分区,然后区内排序

②环形缓存区数据到达阈值(80%),会以小文件的形式溢写到磁盘,此过程可以开启combiner

③将溢写的小文件按照相同分区进行merge

Reduce阶段shuffle:拷贝数据->排序->合并

①一个ReduceTask负责一个分区数据,需从多个MapTask的同一个分区拷贝数据到机器。

②将拷贝过来的数据优先存储在内存,次之磁盘,然后排序,合并做到数据分区内有序

shffle的意义 :只有存在reduce才有shuffle,shuffle的意义就是给reduce提供服务。

介绍

①spark的某些算子会触发shuffle,出现shuffle的目的是在不同分区间重新分配数据。

②shuffle过程数据是跨机器传输的,消耗大量的网络io和序列化,消耗性能。

③shuffle后不能保证新的分区的数据是有序的。区别于MR ( MR的shuffle后区内的数据是有序的 )

但是可以调用排序的算子,使得数据区内有序。

④产生shuffle的算子都是分两步执行,mapTask组织数据(shuffle write), reduceTask(shuffle read)

⑤spark的mapTask优先将数据写入内存,内存不足,将数据区内有序,溢写到磁盘

会产生shuffle的算子

①repartition 和 coalesce 重新计算分区的算子。

②??ByKey:除了countByKey,都会产线shuffle

③cogroup 和 join

性能的影响

shuffle就是将数据在不同分区间进行聚合分配,集群的多节点的数据交换,会涉及到磁盘I/O,序列化,网络I/O,很消耗性能。

spark中的shuffle耗时,消耗性能,应该尽量避免!

spark中的shuffle和MapReduce的shuffle的功能一致,跨机器传输数据,细节略有不同。

以上是关于MapReduce Shuffle中的溢写阶段疑问的主要内容,如果未能解决你的问题,请参考以下文章

大数据之Hadoop(MapReduce):MapReduce Shuffle的优化

Hadoop的溢写

大数据之Hadoop(MapReduce):shuffle之MapTask工作机制

Hadoop Mapreduce中shuffle 详解

MapReduce shuffle阶段详解

Map Reduce编程中reducer中的shuffle和sorting阶段的目的是啥?