Spark中的Shuffle过程

一、Spark中的Shuffle过程

Shuffle分为两种:Shuffle write、Shuffle read

Spark中Shuffle分为两种:HahShuffle、SortShuffle;

1、HashShuffle

磁盘小文件的个数为:M*R = 4*3 =12个

每一个buffer的大小为32k,由于产生的磁盘小文件过多,会产生一系列的问题

如:因为在写文件的时候会产生大量的写句柄,导致产生大量的临时对象,产生OM问题

在Reduce端读取小文件的时候,又会产生的大量的读句柄,浪费资源

在Reduce端读取小文件时,因为小文件数目过多,产生大量的通信操作,通信操作会根频繁,浪费资源。

针对上述问题,对HashShuffle进行了优化操作

此时一个task group共同使用一组block file,这样可以减少大量的磁盘小文件

优化方式中产生磁盘小文件的个数与Executor中Core的个数有关 文件个数 = core*Reduce个数 = 2*3;

2、SortShuffle

SortShuffle分为两种:普通运行机制、ByPass运行机制

(1)普通运行机制

简单说明:

1、一个task产生的数据存储到Map或者Array中(根据使用的算子进行区分),其中内存数据的溢写机制如下:

默认为5M,当数据为5.1m时,此时内存数据会再次申请内存,大小为5.1*2-5 = 5.2m,如果还可以给其分配5.2m的内存,就不溢写,直到最后不能再给其分配资源时,进行溢写。

2、溢写的时会进行排序操作,然后分批写入磁盘文件(默认是batch=1w)

3、在写完成后,会进行文件的合并,并产生一个索引文件,利用快速查找

产生磁盘小文件的个数为:2*m;与Reduce个数无关。

(2)ByPass运行机制

减少了排序的环节

产生磁盘小文件的个数为:2*m;与Reduce个数无关。

bypass运行机制的触发:shuffle.reduce.task数量小于spark.shuffle.sort.bypassMergeThreshold参数的值。

二、Spark 调优

三、Reduce端拉取数据

原文地址:https://www.cnblogs.com/learn-bigdata/p/10802429.html

时间: 2024-08-29 11:16:57

Spark中的Shuffle过程的相关文章

Spark中的Shuffle机制

Spark中的shuffle是在干嘛? Shuffle在Spark中即是把父RDD中的KV对按照Key重新分区,从而得到一个新的RDD.也就是说原本同属于父RDD同一个分区的数据需要进入到子RDD的不同的分区. 但这只是shuffle的过程,却不是shuffle的原因.为何需要shuffle呢? Shuffle和Stage 在分布式计算框架中,比如map-reduce,数据本地化是一个很重要的考虑,即计算需要被分发到数据所在的位置,从而减少数据的移动,提高运行效率. Map-Reduce的输入数

Hadoop与 Spark中的Shuffle之区别与联系

Hadoop与 Spark中的Shuffle之区别与联系 2018年08月22日 20:24:46 小爷欣欣 阅读数:175 转自:http://mini.eastday.com/mobile/180114141035935.html mapreduce过程解析(mapreduce采用的是sort-based shuffle),将获取到的数据分片partition进行解析,获得k/v对,之后交由map()进行处理.map函数处理完成之后,进入collect阶段,对处理后的k/v对进行收集,存储在

Hadoop学习笔记—10.Reduce阶段中的Shuffle过程

一.回顾Reduce阶段三大步凑 在第四篇博文<初识MapReduce>中,我们认识了MapReduce的八大步凑,其中在Reduce阶段总共三个步凑,如下图所示: 其中,Step2.1就是一个Shuffle操作,它针对多个map任务的输出按照不同的分区(Partition)通过网络复制到不同的reduce任务节点上,这个过程就称作为Shuffle. PS:Hadoop的shuffle过程就是从map端输出到reduce端输入之间的过程,这一段应该是Hadoop中最核心的部分,因为涉及到Had

Hadoop中的Shuffle 与 Spark中的Shuffle得区别与联系

MapReduce过程.Spark和Hadoop以Shuffle为中心的对比分析 mapreduce与Spark的map-Shuffle-reduce过程 mapreduce过程解析(mapreduce采用的是sort-based shuffle) 将获取到的数据分片partition进行解析,获得k/v对,之后交由map()进行处理. map函数处理完成之后,进入collect阶段,对处理后的k/v对进行收集,存储在内存的环形缓冲区中. 当环形缓冲区中的数据达到阀值之后(也可能一直没有达到阀值

Hadoop计算中的Shuffle过程

Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce,Shuffle是必须要了解的.我看过很多相关的资料,但每次看完都云里雾里的绕着,很难理清大致的逻辑,反而越搅越混.前段时间在做MapReduce job性能调优的工作,需要深入代码研究MapReduce的运行机制,这才对Shuffle探了个究竟.考虑到之前我在看相关资料而看不懂时很恼火,所以在这里我尽最大的可能试着把Shuffle说清楚,让每一位想了解它原理的朋友都能有所收获.如果你对这篇文章有任何

MapReduce中的shuffle过程

MapReduce的shuffle过程介绍 Shuffle的语义是洗牌.混洗,即把一组有一定规则的数据尽量转换成一组无规则的数据,随机性越高越好. MapReduce中的Shuffle更像是洗牌的逆过程,把一组无规则的数据尽量转换成一组具有一定规则的数据. 为什么MapReduce计算模型需要Shuffle过程? MapReduce计算模型一般包括两个重要的阶段: Map是映射,负责数据的过滤分发: Reduce是规约,负责数据的计算归并. Reduce的数据来源于Map,Map的输出即Redu

Spark 的 Shuffle过程介绍`

Spark的Shuffle过程介绍 Shuffle Writer Spark丰富了任务类型,有些任务之间数据流转不需要通过Shuffle,但是有些任务之间还是需要通过Shuffle来传递数据,比如wide dependency的group by key. Spark中需要Shuffle输出的Map任务会为每个Reduce创建对应的bucket,Map产生的结果会根据设置的partitioner得到对应的bucketId,然后填充到相应的bucket中去.每个Map的输出结果可能包含所有的Redu

Spark的Shuffle过程介绍

Spark的Shuffle过程介绍 Shuffle Writer Spark丰富了任务类型,有些任务之间数据流转不需要通过Shuffle,但是有些任务之间还是需要通过Shuffle来传递数据,比如wide dependency的group by key. Spark中需要Shuffle输出的Map任务会为每个Reduce创建对应的bucket,Map产生的结果会根据设置的partitioner得到对应的bucketId,然后填充到相应的bucket中去.每个Map的输出结果可能包含所有的Redu

shuffle过程中的信息传递

Spark中的shuffle大概是这么个过程:map端把map输出写成本地文件,reduce端去读取这些文件,然后执行reduce操作. 那么,问题来了: reducer是怎么知道它的输入在哪呢? 首先,mapper在写完文件之后,肯定能提供与它的输出相关的信息.这个信息,在Spark中由MapStatus表示 private[spark] sealed trait MapStatus { def location: BlockManagerId def getSizeForBlock(redu