【spark面试】spark的shuffle过程

概述

所有的shuffle的过程本质上就是一个task将内存中的数据写入磁盘,然后另一个task将磁盘中的数据读入内存的过程。

对于mapreduce来说,我们将内存中的数据写入磁盘成为maptask,将磁盘中的数据读入内存称为reducetask。

而对于spark来说,有的算子的执行会同时会进行写入和读出,这就是shuffle算子,shuffle算子都是转换算子。

面试题1:什么是触发算子,什么是转换算子,什么是shuffle算子

触发算子:

take,count,saveAsTextFile,foreach,foreachpartition,min,max,mean,top,takeOrdered,collect,first,reduce。

转换算子:

filter,map,mapPartitions,flatMap,union,distict,mapValues,keys,values,sortBy,sortByKey,reduceByKey,groupBykey,repartition,coalesce,join类(join,fullOuterJoin,leftOuterJoin,rightOuterJoin)

shuflle算子:

flatMap,distinct,sortBy,sortByKey,reduceByKey,groupByKey,join类(join,fullOuterJoin,leftOuterJoin,rightOuterJoin),repartition,coalesce(根据情况)

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 个文件。

3)Sort Based Shuffle 目前最新的

对于这种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过程一定会经过合并排序、分组
相关推荐
码农小韩1 分钟前
AIAgent应用开发——大模型理论基础与应用(七)
python·学习·ai·大模型·agent
CodeLinghu2 分钟前
LangSmith Evaluate实战评估Agent
人工智能·python·语言模型·llm
阿部多瑞 ABU36 分钟前
正反馈的死亡螺旋:数字资本时代泛二次元文化-情感-金融复合体的系统性分析
大数据·人工智能·金融
起司喵喵42 分钟前
推荐一款基于 Python 和 Rust 开发的跨平台 GUI 自动化库!
python·rust·自动化
过期的秋刀鱼!1 小时前
学习曲线-过拟合和欠拟合要做什么以及原因
人工智能·python·深度学习·算法·机器学习·模型评估
zhbcddxr1 小时前
GEO服务商度量监测能力测评:可见度追踪与报表排行
大数据·人工智能·microsoft
科技发布1 小时前
拆解传播易服务模式,看清小红书团购从入驻变现完整逻辑
大数据·人工智能
Yolanda_20221 小时前
Python学习-第九部分-错误处理与异常处理
开发语言·python·学习
这个人懒得名字都没写2 小时前
Flask + PyArmor Gunicorn启动报错:RuntimeError: unauthorised use of script
python·flask·gunicorn·pyarmor
C++、Java和Python的菜鸟2 小时前
第10章 后端Web进阶(Maven高级)
开发语言·python