CC00096.spark——|Hadoop&Spark.V12|——|Spark.v12|Spark 原理 源码|Shuffle详解|

一、Shuffle详解
### --- shuffle详解

~~~     在 Spark 或 MapReduce 分布式计算框架中,数据被分成一块一块的分区,
~~~     分布在集群中各节点上,每个计算任务一次处理一个分区,
~~~     当需要对具有某种共同特征的一类数据进行计算时,就需要将集群中的这类数据汇聚到同一节点。
~~~     这个按照一定的规则对数据重新分区的过程就是Shuffle。
二、Spark Shuffle的两个阶段
### --- Spark Shuffle的两个阶段

~~~     对于Spark来讲,一些Transformation或Action算子会让RDD产生宽依赖,
~~~     即Parent RDD中的每个Partition被childRDD中的多个Partition使用,这时需要进行Shuffle,
~~~     根据Record的key对parent RDD进行重新分区。
~~~     以Shuffle为边界,Spark将一个Job划分为不同的Stage。
~~~     Spark的Shuffle分为Write和Read两个阶段,分属于两个不同的Stage,
~~~     前者是Parent Stage的最后一步,后者是Child Stage的第一步。
三、Spark Shuffle执行流程图
### --- Spark 的 Stage 分为两种:

~~~     ResultStage。负责返回计算结果
~~~     ShuffleMapStage。其他的均为ShuffleMapStage
### --- 如果按照 map 端和 reduce 端来分析的话:

~~~     ShuffleMapStage可以即是map端任务,又是reduce端任务
~~~     ResultStage只能充当reduce端任务
### --- Spark Shuffle的流程简单抽象为以下几步:

~~~     Shuffle Write
~~~     Map side combine (if needed)
~~~     Write to local output file
~~~     Shuffle Read
~~~     Block fetch
~~~     Reduce side combine
~~~     Sort (if needed)
四、Spark Shuffle技术演进
### --- 在Spark Shuffle的实现上,经历了Hash、Sort、Tungsten-Sort三阶段:

~~~     Spark 0.8及以前 Hash Based Shuffle
~~~     Spark 0.8.1 为Hash Based Shuffle引入File Consolidation机制
~~~     Spark 0.9 引入ExternalAppendOnlyMap
~~~     Spark 1.1 引入Sort Based Shuffle,但默认仍为Hash Based Shuffle
~~~     Spark 1.2 默认的Shuffle方式改为Sort Based Shuffle
~~~     Spark 1.4 引入Tungsten-Sort Based Shuffle
~~~     Spark 1.6 Tungsten-sort并入Sort Based Shuffle
~~~     Spark 2.0 Hash Based Shuffle退出历史舞台
### --- 简单的说:

~~~     Spark 1.1 以前是Hash Shuffle
~~~     Spark 1.1 引入了Sort Shuffle
~~~     Spark 1.6 将Tungsten-sort并入Sort Shuffle(利用对外内存进行排序)
~~~     Spark 2.0 Hash Shuffle退出历史舞台
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值