shuffle——spark

什么是shuffle

shuffle过程本质上是磁盘读写的过程

Spark Shuffle过程也叫作宽依赖过程

Spark中哪些算子会产生Shuffle?

复制代码
连接类 :join fullOuterJoin leftOuterjoin rightOuterJoin
分区类:repartition coalesce(根据情况)
排序类:sortBy sortByKey
汇总类:reduceBykey groupBykey
去重类:distinct
flatmap

spark中的shuffle

1)Hash Based Shuffle

复制代码

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

2) Hash Based Shuffle 【优化后的,File Consolidation机制】

两个Executor ,4个ReduceTask,那就是 2 * 4 = 8 进步在哪里?进度在于如果是以前 4 个 map 4 个 reduce 形成 16 个文件,现在引入 executor 以后,生成 8 个文件。 生成的文件数量 =Executor的数量*reduce任务的数量 原来:生成的文件数量 =map任务的数量*reduce任务的数量

3) Sort Based Shuffle 目前最新的

Shuffle Write

第一种:SortShuffleWriter:普通Sort Shuffle Write机制

复制代码
与MR的Map端Shuffle基本一致
生成一个整体基于分区和分区内部有序的文件和一个索引文件
特点:有排序,先生成多个有序小文件,再生成整体有序大文件,每个Task生成2个文件,数据文件和索引文件

第二种:BypassMergeSortShuffleWriter

复制代码
类似于优化后的Hash Based Shuffle
先为每个分区生成一个文件,最后合并为一个大文件,分区内部不排序
跟第一个相比,处理的数据量小,处理的分区数小于200 ,不在内存中排序。
场景:数据量小

第三种:UnsafeShuffleWriter

复制代码
Partition个数不能超过2^24-1个(大于200用这个)
场景:数据量大
Shuffle Read
复制代码
类似于MapReduce中的Reduce端shuffle

MR:Reduce端的shuffle过程一定会经过合并排序、分组
相关推荐
夏天的清晨4 分钟前
C++入门学习
开发语言·c++·学习
传奇开心果编程4 分钟前
【ArkUI进阶练中学】第18课:Agent亲和架构与应用智能化改造
学习·ui·华为·harmonyos
Patrick在香港5 分钟前
MCP 的 initialize 握手真的没了?67 行标准库实测 2026-07-28 规范
python·agent·claude·mcp·json-rpc
代码山河6 分钟前
Java的前世今生:从Oak语言到Java 23的发展史
java·学习·架构·教程·面向对象·项目
198******126347 分钟前
2026企业AI办公工具选型全指南:自动资料整合与报告生成赛道全景
大数据·人工智能
vx_Biye_Design7 分钟前
springboot角色扮演服务平台65161-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·spring·课程设计
一木 之林8 分钟前
《OpenAI库基础学习总结:Client 初始化、流式输出 delta 拼接与多轮历史 messages 全流程拆解》
人工智能·学习·计算机视觉·stable diffusion·aigc
追烽少年x10 分钟前
从零构建一个3D点云预览器:Python + PySide6 + pyqtgraph 实战
python·3d
m4Rk_12 分钟前
【论文阅读】Agent 记忆机制(90):HyperMem——用超图建模长期记忆中的高阶关联
论文阅读·人工智能·学习·开源·github
计算机毕业设计杰瑞15 分钟前
【2027大数据毕设精品】基于大数据的社交媒体用户行为数据分析与可视化,附源码_数据可视化_数据分析_数据挖掘_Hadoop_spark_文档指导_毕设指导
大数据·信息可视化·数据挖掘·课程设计