Spark与Hadoop Shuffle对比
1)
-
spark中只有特定的算子会触发shuffle,shuffle会在不同的分区间重新分配数据!
-
如果出现了shuffle,会造成需要跨机器和executor传输数据,这样会导致 低效和额外的资源消耗!
2)
和Hadoop的shuffle不同的时,数据分到哪些区是确定的,但是在区内的顺序不一定有序!
Hadoop 的shuffle :
MapTask : map------- sort -------- merge
ReduceTask: copy ---- sort ----- reduce
shuffle阶段 : sort -------- merge ----- copy ---- sort
Spark的shuffle:
第一种表现: MapTask端也不排序,ReduceTask一定不排序!
第二种表现: MapTask端可以排序,ReduceTask一定不排序!
如果希望shuffle后的数据有序,可以以下操作:
a) 调用mapPartitions,对每个分区的数据,进行手动排序!
b)repartitionAndSortWithinPartitions
c)sortBy
3)
什么操作会导致shuffle
a)重新分区的算子 : reparition, collase
b) xxxBykey类型的算子,除了 count(统计)ByKey
c)join类型的算子,例如cogroup
and join
.
4)
在Spark中,shuffle会带来性能消耗,主要涉及 磁盘IO,网络IO,对象的序列化和反序列化!
总结:
①Spark的shuffle和Hadoop的shuffle目的都是为了 在不同的task交换数据!
② Spark的shuffle借鉴了hadoop的shuffle,但是在细节上略有不同
hadoop的shuffle: 在到达ReduceTask端时,会进行排序!
在Spark中,数据在ReduceTask端一定不排序,在MapTask端,可以根据设置进行排序或不排!
③shuffle会消耗性能,因此能避免就避免,避免不了,采取一些优化的策略!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
2018-12-21 Scala类的构造器与访问器