当前位置: 首页 > article >正文

【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过程一定会经过合并排序、分组

        


http://www.kler.cn/a/386053.html

相关文章:

  • shell编程之变量与引用
  • nacos-operator在k8s集群上部署nacos-server2.4.3版本踩坑实录
  • Uniapp踩坑input自动获取焦点ref动态获取实例不可用
  • 卡尔曼滤波:从理论到应用的简介
  • SpringBoot开发——整合AJ-Captcha实现安全高效的滑动验证码
  • 【WPF】Prism学习(二)
  • 【QT项目】QT6项目之基于C++的通讯录管理系统(联系人/学生管理系统)
  • Python世界:力扣题704二分查找
  • 大型语言模型(LLMs)关键技术指南
  • 科技改变生活:最新智能开关、调光器及插座产品亮相
  • ElasticSearch学习篇16_《检索技术核心20讲》进阶篇之空间检索
  • 无人机影像处理系统技术选型
  • 云计算:定义、类型及对企业的影响
  • MATLAB filtic函数使用详解
  • Seata — 分布式事务
  • .Net IOC理解及代码实现
  • 开源模型应用落地-glm模型小试-glm-4-9b-chat-批量推理(二)
  • 阿里云aliyun gradle安装包下载地址
  • Kotlin-面向对象之构造函数、实例化和初始化
  • Vue3+axios+Vite配置Proxy代理解决跨域
  • 【spark面试题】RDD容错机制
  • 基于Jeecgboot3.6.3vue3的flowable流程增加online表单的审批支持(三)后端接口
  • 高效集成:聚水潭采购数据同步到MySQL
  • 【ARM Linux 系统稳定性分析入门及渐进 1.1 -- Crash 工具功能概述】
  • 浅谈智能家居在智慧养老实训室中的作用
  • 飞书 富文本(Markdown)