|NO.Z.00037|——————————|BigDataEnd|——|Hadoop&Spark.V11|——|Spark.v11|sparkcore|RDD编程高阶&spark原理初探&shuffle原理|
一、Shuffle原理
### --- shuffle原理
~~~ Shuffle的本意是洗牌,目的是为了把牌弄乱。
~~~ Spark、Hadoop中的shuffle可不是为了把数据弄乱,
~~~ 而是为了将随机排列的数据转换成具有一定规则的数据。
~~~ Shuffle是MapReduce计算框架中的一个特殊的阶段,介于Map 和 Reduce 之间。
~~~ 当Map的输出结果要被Reduce使用时,输出结果需要按key排列,
~~~ 并且分发到Reducer上去,这个过程就是shuffle。
~~~ shuffle涉及到了本地磁盘(非hdfs)的读写和网络的传输,
~~~ 大多数Spark作业的性能主要就是消耗在了shuffle环节。
~~~ 因此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退出历史舞台
二、shuffle原理

三、Hash Base Shuffle
### --- Hash Base Shuffle V1
~~~ 每个Shuffle Map Task需要为每个下游的Task创建一个单独的文件
~~~ Shuffle过程中会生成海量的小文件。同时打开过多文件、低效的随机IO

### --- Hash Base Shuffle V2
~~~ Hash Base Shuffle V2 核心思想:
~~~ 允许不同的task复用同一批磁盘文件,有效将多个task的磁盘文件进行一定程度上的合并,
~~~ 从而大幅度减少磁盘文件的数量,进而提升shuffle write的性能。
~~~ 一定程度上解决了Hash V1中的问题,但不彻底。
~~~ Hash Shuffle 规避了排序,提高了性能;
~~~ 总的来说在Hash Shuffle过程中生成海量的小文件(Hash Base Shuffle V2
~~~ 生成海量小文件的问题得到了一定程度的缓解)。

### --- Sort Base Shuffle
~~~ Sort Base Shuffle大大减少了shuffle过程中产生的文件数,提高Shuffle的效率;
~~~ Spark Shuffle 与 Hadoop 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
分类:
bdv016-spark.v01
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」