首页 > 其他分享 >Spark中的shuffle

Spark中的shuffle

时间:2024-11-06 19:48:26浏览次数:3  
标签:Shuffle 数据量 shuffle Spark 排序 Based

Shuffle的本质基于磁盘划分来解决分布式大数据量的全局分组、全局排序、重新分区【增大】的问题。

1、Spark的Shuffle设计

Spark Shuffle过程也叫作宽依赖过程,Spark不完全依赖于内存计算,面临以上问题时,也需要Shuffle过程。

2、Spark中哪些算子会产生Shuffle?

只要这个算子包含以下四个功能之一:必须经过Shuffle

        进行join:join、fullOuterJoin、 leftOuterJoin 、rightOuterJoin
        大数据量全局分组:reduceByKey、groupByKey
        大数据量全局排序:sortBy、sortByKey
        大数据量增大分区:repartition、coalesce 

 3、Spark中有哪些shuffle【分类的】? 

Spark 0.8及以前 Hash Based Shuffle
Spark 0.8.1 为 Hash Based Shuffle 引入 File Consolidation 机制
Spark 1.1 引入 Sort Based Shuffle ,但默认仍为 Hash Based Shuffle
Spark 1.2 默认的 Shuffle 方式改为 Sort Based Shuffle
Spark 1.4 引入 Tungsten-Sort Based Shuffle 直接使用堆外内存和新的内存管理模型,节省了内存空间和大量的gc,提升了性能
Spark 1.6 Tungsten-sort 并入 Sort Based Shuffle
Spark 2.0 Hash Based Shuffle 退出历史舞台

1)Hash Based Shuffle

特点:没有排序,只分区,每个Task按照ReduceTask个数生成多个文件【M * R】

优点:简单,数据量比较小,性能就比较高

缺点:小文件非常多,数据量比较大性能非常差

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

3) Sort Based Shuffle [目前最新的] 

 Shuffle Write + Shuffle Read

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

Shuffle Read:类似于MR中的Reduce端Shuffle,但是 Spark的 Shuffle Read 功能由算子来决定,不同算子经过的过程不一样的。

4、Spark 2以后的Shuffle Write判断机制:

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

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

第二种:BypassMergeSortShuffleWriter 

类似于优化后的Hash Based Shuffle,先为每个分区生成一个文件,最后合并为一个大文件,分区内部不排序
条件:分区数小于200,并且Map端没有聚合操作
场景:数据量小

跟第一个相比,处理的数据量小,处理的分区数小于200 ,不在内存中排序。

第三种:UnsafeShuffleWriter 

钨丝计划方案,使用UnSafe API操作序列化数据,使用压缩指针存储元数据,溢写合并使用fastMerge提升效率

条件:Map端没有聚合操作、序列化方式需要支持重定位,Partition个数不能超过2^24-1个

在什么情况下使用什么ShuffleWriter 呢?

ShuffleWriter的实现方式有三种:

BypassMergeSortShuffleWriter

使用这种shuffle writer的条件是:

(1) 没有map端的聚合操作
(2) 分区数小于参数:spark.shuffle.sort.bypassMergeThreshold,默认是200

UnsafeShuffleWriter

使用这种shuffle writer的条件是:

(1) 序列化工具类支持对象的重定位
(2) 不需要在map端进行聚合操作
(3) 分区数不能大于:PackedRecordPointer.MAXIMUM_PARTITION_ID + 1

SortShuffleWriter

若以上两种shuffle writer都不能选择,则使用该shuffle writer类。
这也是相对比较常用的一种shuffle writer。

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

MR:Reduce端的shuffle过程一定会经过合并排序、分组
需求:统计每个单词出现的次数,不需要排序,依旧会给结果进行排序


Spark:Shuffle Read具体的功能由算子来决定,不同的算子在经过shuffle时功能不一样
reduceByKey:Shuffle Read:只分组聚合,不排序
sortByKey:Shuffle Read:只排序,不分组
repartition:Shuffle Read:不排序,不分组

标签:Shuffle,数据量,shuffle,Spark,排序,Based
From: https://blog.csdn.net/weixin_63297999/article/details/143578160

相关文章

  • 如何在DataGrip上使用hive的数据源编写Spark代码
    Spark是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。Spark作为一个计算平台并不是作为一个数据库不像hive以及mysql一样可以直接远程连接DataGrip使用,本篇就展示如何使用DataGrip使用hive作为数据源编写Spark代码查询hive数据库首先确保你的hive以及Spa......
  • 《SparkSQL--通过ThriftServer连接DataGrip》
    ThriftServer功能:类似于HiveServer2,负责解析客户端提交的SQL语句,转换成Spark的任务进行执行本质:Spark中的一个特殊的程序,利用程序的资源运行所有SQL,该程序除非手动关闭,否则一直运行 启动服务,该服务不会停止,一直在后台启动,假如启动不了,记得查看日志。/opt/installs/spark/sb......
  • SparkSql读取数据的方式
    一、读取普通文件 方式一:给定读取数据源的类型和地址spark.read.format("json").load(path)spark.read.format("csv").load(path)spark.read.format("parquet").load(path)方式二:直接调用对应数据源类型的方法spark.read.json(path)spark.read.csv(path)spark.read.pa......
  • QueryExecutionListener 实现 SPARK SQL 数据血缘
    背景数据血缘是数据资产管理非常重要的一部份,团队现在已经实现通过Hook上报HiveSQL任务数据血缘,通过impalalineage日志获取impala任务数据血缘。随着SparkSQL计算引擎的使用,现针对该场景设计可行的血缘获取方案。方案思路分析在spark的源码中,以Scala的形式提供了......
  • 178_springboot基于spark的汽车行业大数据分析系统
    目录系统展示开发背景代码实现项目案例 获取源码博主介绍:CodeMentor毕业设计领航者、全网关注者30W+群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AWS/Wired等平台优选内容创作者、深耕Web......
  • pyspark建模(类似于dwd层),flask直接对接前端请求进行召回(类似于ads层,但是不保存)
    2.SparkMLib2.1SparkMLib开发环境准备2.1.1配置python和spark环境安装Python环境安装Anaconda3-5.2.0-Windows-x86_64.exe配置环境变量Anaconda_HOMEE:\20241014_Soft\Anaconda3PATH%Anaconda_HOME%Scripts;%Anaconda_HOME%Library\mingw-w64\bin;%Anaconda_H......
  • spark 热门面试题 (算子)
    1,哪些是触发算子countforeachsaveAsTextFilefirsttakecollectreducetoptakeOrderedcollectAsMapforeachParitionmaxminmeansum2,哪些是转换算子mapflatMapfilteruniondistinctgroupByKeysortByKeysortByreduceByKeyrepartitioncoalescekeysvalues......
  • spark-on-k8s 介绍
    spark-on-k8s介绍摘要最近一段时间都在做与spark相关的项目,主要是与最近今年比较火的隐私计算相结合,主要是在机密计算领域使用spark做大数据分析、SQL等业务,从中也了解到了一些spark的知识,现在做一个简单的总结,主要关注sparkonk8s模式。需要先从大数据开始讲起,大数据......
  • hadoop+Spark+django基于大数据技术的高校岗位招聘平台与数据可视化分析(源码+文档+调
    收藏关注不迷路!!......
  • 招聘大数据可视化分析系统 求职就业数据分析 Flask框架 hadoop和spark技术(建议收藏)✅
    博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌>......