Spark中的shuffle过程详细

一、Spark中哪些算子会产生Shuffle

全局分组:reduceByKey,groupByKey

全局排序:sortBy,sortByKey

增大分区:repartition,coalese

groupByKey sortByKey sortBy reduceByKey repartition

coalesce(根据情况) join / fullOuterJoin / leftOuterJoin / rightOuterJoin

二、Spark中有哪些shuffle分类

Hash Based Shuffle (老的) Sort Based Shuffle 新的shuffle工具中包含Tungsten-Sort Based Shuffle

1、Hash Based Shuffle

没有排序,只有分区,每个Task按照ReduceTask个数生成【M*R】,简单数据量比较小,性能就比较高,但是:小文件非常多,数据量比较大性能非常差

2、Hash Based Shuffle 优化后,File Consolidation机制

没有排序,只有分区,每个Executor按照ReducTask个数生成多个文件:Executor*R

3、Sort Based Shuffle 目前是最新的

分为两个

Shuffle Write:类似于mr中map端的shuffle,但是Spark的Shuffle Write有3种,会根据情况自动判断选择哪种Shuffle Write

Shuffle Read:类似与mr种的reduce端shuffle,但是Spark的Shuffle Read功能由算子决定,不同算子经过的过程不一样

SortShuffleWrite:普通 Sort Shuffle Write

排序,生成一个整体基于分区和分区内部有序的文件和一个索引文件,有序排序,先生成多个小文件,再生成整体有序大文件,每个Task生成2个文件,数据文件和索引文件,Sort Shuffle Write过程与MapReduce的Map端shuffle基本一致

BypassMergeSortShuffleWriter:

类似与序列化后的Hash Based Shuffle,先每个分区生成一个文件,最后合并为一个大文件,分区内部不排序,分区数小于200,并且没有map端的聚合操作,适用于数据量小的数据,不在内存中排序

UnsafeShuffleWriter

钨丝计划方案,使用UnSafe API操作序列化数据,使用压缩指针存储元数据,溢写合并使用fastMerge提升效率,Map端没有聚合操作、序列化方式需要支持重定位,Partition个数不能超过2^24-1个

什么时候下使用ShuffleWriter

ShuffleWriter的实现方式

BypassMergeSortShuffleWriter

使用这种shuffle writer的条件是,没有map端的聚合操作,分区数小于参数:spark.shuffle.sort.bypassMergeThreshold,默认是200

UnsafeShuffleWriter

使用这种shuffle writer的条件是,序列化工具类支持对象的重定位,不需要在map端进行聚合操作,分区数不能大于:PackedRecordPointer.MAXIMUM_PARTITION_ID + 1

SortShuffleWriter

若以上两种shuffle writer都不能选择,则使用该shuffle writer类。

这也是相对比较常用的一种shuffle writer。

Shuffle Read:类似于MapReduce中的Reduce端shuffle

Reduce端的shuffle过程一定会经过合并排序、分组,不需要排序,依旧会给结果进行排序

相关推荐
江屿风36 分钟前
【认识深度学习】【深度学习分类与计算机视觉任务要点解析】流食般投喂
大数据·人工智能·深度学习·计算机视觉·目标跟踪·自然语言处理·语音识别
建筑工程企业管理系统43 分钟前
工程建设管理信息系统如何选型?多项目协同管控避坑指南
大数据·软件工程·软件需求
灰山君1 小时前
企业三维可视化怎么选?山海鲸可视化与老子云3D优势对比
大数据·经验分享·数字孪生·可视化·数据可视化·实时大数据
Elastic 中国社区官方博客1 小时前
jina-ocr-v1:在低成本 GPU 上实现更快速的文档解析
大数据·数据库·elasticsearch·搜索引擎·全文检索·jina
Databend1 小时前
Jev 爆火之后,我们把它集成进了数据湖仓
大数据·数据库·agent
拾光师1 小时前
MapReduce Shuffle 深度解析:数据从 Map 到 Reduce 的完整旅程
大数据
小小程序猴11 小时前
中小企业AI转型课程模块的工程化设计:从能力矩阵到课程编排
大数据·人工智能
Aloudata1 小时前
语义层和SQL Copilot:一个降低写SQL门槛,一个统一业务逻辑
大数据·人工智能·数据分析·data agent·语义层
IT研究室2 小时前
最新大数据毕业设计选题推荐-基于大数据的信用等级数据分析与可视化-大数据-Spark-Hadoop-Bigdata
大数据·信息可视化·数据分析·spark·课程设计
不会写代码的女程序猿2 小时前
商用 AI 四诊仪技术拆解|明理 AI 四诊仪多模态采集方案解析
大数据·人工智能·科技·ai·健康医疗