|NO.Z.00098|——————————|BigDataEnd|——|Hadoop&Spark.V14|——|Spark.v14|Spark 原理 源码|Shuffle详解&Sort Shuffle V1&Sort Shuffle V2|

一、Sort Shuffle V1
### --- Sort Shuffle V1

~~~     为了更好地解决上面的问题,Spark 参考了 MapReduce 中 Shuffle 的处理方式,
~~~     引入基于排序的 Shuffle 写操作机制。
~~~     每个 Task 不会为后续的每个 Task 创建单独的文件,而是将所有对结果写入同一个文件。
~~~     该文件中的记录首先是按照Partition Id 排序,每个 Partition 内部再按照 Key 进行排序,
~~~     Map Task 运行期间会顺序写每个 Partition 的数据,
~~~     同时生成一个索引文件记录每个 Partition 的大小和偏移量。
二、Sort Shuffle V1架构图
### --- Sort Shuffle V1说明

~~~     在 Reduce 阶段,Reduce Task 拉取数据做 Combine 时不再采用 HashMap,
~~~     而是采用ExternalAppendOnlyMap,该数据结构在做 Combine 时,
~~~     如果内存不足,会刷写磁盘,避免大数据情况下的 OOM。
~~~     总体上看来 Sort Shuffle 解决了 Hash Shuffle 的所有弊端,
~~~     但是因为需要其 Shuffle 过程需要对记录进行排序,所以在性能上有所损失。
### --- Tungsten-Sort Based Shuffle / Unsafe Shuffle

~~~     从 Spark 1.5.0 开始,Spark 开始了钨丝计划(Tungsten),
~~~     目的是优化内存和CPU的使用,进一步提升Spark的性能。
~~~     由于使用了堆外内存,而它基于 JDK Sun Unsafe API,
~~~     故 Tungsten-Sort Based Shuffle 也被称为 UnsafeShuffle。
~~~     它的做法是将数据记录用二进制的方式存储,
~~~     直接在序列化的二进制数据上 Sort 而不是在 Java 对象上,
~~~     这样一方面可以减少内存的使用和 GC 的开销,
~~~     另一方面避免 Shuffle 过程中频繁的序列化以及反序列化。
~~~     在排序过程中,它提供 cache-efficient sorter,使用一个 8 bytes 的指针,
~~~     把排序转化成了一个指针数组的排序,极大的优化了排序性能。
~~~     但是使用 Tungsten-Sort Based Shuffle 有几个限制,Shuffle 阶段不能有 aggregate 操作,
~~~     分区数不能超过一定大小(2^24-1,这是可编码的最大 Parition Id),
~~~     所以像 reduceByKey 这类有 aggregate 操作的算子是不能使用Tungsten-Sort Based Shuffle,
~~~     它会退化采用 Sort Shuffle。
二、Sort Shuffle V2
### --- Sort Shuffle V2

~~~     从 Spark1.6.0 开始,把 Sort Shuffle 和 Tungsten-Sort Based Shuffle 全部统一到 Sort Shuffle 中,
~~~     如果检测到满足Tungsten-Sort Based Shuffle 条件会自动采用 Tungsten-Sort Based Shuffle,
~~~     否则采用 Sort Shuffle。从Spark2.0 开始,Spark 把 Hash Shuffle 移除, 
~~~     Spark2.x 中只有一种 Shuffle,即为 Sort Shuffle。

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(18)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示