Spark原理——Shuffle 过程

news2025/2/24 20:25:54

Shuffle 过程

  • Shuffle过程的组件结构

    从整体视角上来看, Shuffle 发生在两个 Stage 之间, 一个 Stage 把数据计算好, 整理好, 等待另外一个 Stage 来拉取

    在这里插入图片描述

    放大视角, 会发现, 其实 Shuffle 发生在 Task 之间, 一个 Task 把数据整理好, 等待 Reducer 端的 Task 来拉取

    在这里插入图片描述

    如果更细化一下, Task 之间如何进行数据拷贝的呢? 其实就是一方 Task 把文件生成好, 然后另一方 Task 来拉取

    在这里插入图片描述

    现在是一个 Reducer 的情况, 如果有多个 Reducer 呢? 如果有多个 Reducer 的话, 就可以在每个 Mapper 为所有的 Reducer 生成各一个文件, 这种叫做 Hash base shuffle, 这种 Shuffle 的方式问题大家也知道, 就是生成中间文件过多, 而且生成文件的话需要缓冲区, 占用内存过大

    那么可以把这些文件合并起来, 生成一个文件返回, 这种 Shuffle 方式叫做 Sort base shuffle, 每个 Reducer 去文件的不同位置拿取数据

    在这里插入图片描述

    如果再细化一下, 把参与这件事的组件也放置进去, 就会是如下这样

    在这里插入图片描述

  • 有哪些 ShuffleWriter ?

    大致上有三个 ShufflWriter, Spark 会按照一定的规则去使用这三种不同的 Writer

    • BypassMergeSortShuffleWriter

      这种 Shuffle Writer 也依然有 Hash base shuffle 的问题, 它会在每一个 Mapper 端对所有的 Reducer 生成一个文件, 然后再合并这个文件生成一个统一的输出文件, 这个过程中依然是有很多文件产生的, 所以只适合在小量数据的场景下使用

      Spark 有考虑去掉这种 Writer, 但是因为结构中有一些依赖, 所以一直没去掉

      当 Reducer 个数小于 spark.shuffle.sort.bypassMergeThreshold, 并且没有 Mapper 端聚合的时候启用这种方式

    • SortShuffleWriter

      这种 ShuffleWriter 写文件的方式非常像 MapReduce 了, 后面详说

      当其它两种 Shuffle 不符合开启条件时, 这种 Shuffle 方式是默认的

    • UnsafeShuffleWriter

      这种 ShuffWriter 会将数据序列化, 然后放入缓冲区进行排序, 排序结束后 Spill 到磁盘, 最终合并 Spill 文件为一个大文件, 同时在进行内存存储的时候使用了 Java 得 Unsafe API, 也就是使用堆外内存, 是钨丝计划的一部分

      也不是很常用, 只有在满足如下三个条件时候才会启用

      1. 序列化器序列化后的数据, 必须支持排序
      2. 没有 Mapper 端的聚合
      3. Reducer 的个数不能超过支持的上限 (2 ^ 24)

    SortShuffleWriter的执行过程

    在这里插入图片描述

    整个 SortShuffleWriter 如上述所说, 大致有如下几步

    1. 首先 SortShuffleWriter 在 write 方法中回去写文件, 这个方法中创建了 ExternalSorter
    2. write 中将数据 insertAll 到 ExternalSorter 中
    3. 在 ExternalSorter 中排序如果要聚合, 放入 AppendOnlyMap 中, 如果不聚合, 放入 PartitionedPairBuffer 中在数据结构中进行排序, 排序过程中如果内存数据大于阈值则溢写到磁盘
    4. 使用 ExternalSorter 的 writePartitionedFile 写入输入文件将所有的溢写文件通过类似 MergeSort 的算法合并将数据写入最终的目标文件中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1380326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据集处理】FFHQ如何进行人脸对齐,Aligned and cropped images at 1024×1024

什么是人脸对齐? 人脸对齐是一种图像处理技术,旨在将图像中的人脸部分对齐到一个标准位置或形状。在许多情况下,这通常涉及将眼睛、鼻子和嘴巴等关键点对齐到特定的位置。通过这种方式,所有的人脸图像可以有一个一致的方向和尺寸…

josef约瑟 中间继电器 HJDZ-E440额定电压:AC220V 卡轨安装

HJDZ-静态中间继电器 系列型号: HJDZ-A200静态中间继电器;HJDZ-A110静态中间继电器; HJDZ-A002静态中间继电器;HJDZ-A004静态中间继电器; HJDZ-E112静态中间继电器;HJDZ-E112L静态中间继电器&#xff1…

opencv(C++)基础用法

文章目录 前言一、opencv (C)图片基本操作1.1 读取图片并显示1.2 颜色转换1.3 图像filtering1.4 形状调整1.5 绘制 二、读取视频文件并显示三、RTSP 视频流四. 人脸检测总结 前言 学习笔记 一、opencv (C)图片基本操作 1.1 读取图片并显示 #include "opencv2/opencv.hp…

操作系统-操作系统的概念和功能

文章目录 大家熟悉的操作系统总览操作系统的概念(定义)操作系统的功能和目标-作为系统资源的管理者操作系统的功能和目标-向上层提供方便易用的服务图形化用户接口联机命令接口脱机命令接口程序接口小结 操作系统的功能和目标-作为最解决硬件的层次小结 …

Go-安装与基础语法

TOC 1. Go 安装与环境变量 1.1 下载 需要从Go语言的官方网站下载适合你操作系统的Go语言安装包。Go语言支持多种操作系统,包括Windows、Linux和Mac OS。 对于Windows用户,下载.msi文件,然后双击该文件,按照提示进行安装即可。…

【电路电子学】7天速通攻略+笔记

7天是 看视频记笔记刷题的总时长,时间紧迫的同学可以看情况进行缩减。个人认为做题,尤其是解析齐全的题最重要! 我校所用教材 《电路与电子学基础》唐胜安 复习总流程 所用材料(都可自行找到免费资源) 视频知识点讲…

如何用Python虚拟环境virtualenv轻松管理多个项目?你想要的都在这里!

目录 Python 虚拟环境安装 Python 虚拟环境能够实现多环境隔离。 虚拟环境的应用场景 例如,在一台电脑上开发涉及多种技术栈的项目时,不同技术底层依赖可能存在冲突。这种情况下,解决了某个项目的问题可能会影响到其他项目的运行&#xff0c…

数据洞察力,驱动企业财务变革

我们不得不面对一个现实,就是数据量的剧增。加上大部分企业并不愿意删除历史数据,以防未来预测分析时需要,这造成数据就像一个雪球,越滚越大。然而,过多的数据和数据不足一样会成为企业发展和理解分析的障碍。从海量数…

动态规划part04 416. 分割等和子集

01背包问题 二维 代码随想录 视频讲解:带你学透0-1背包问题!| 关于背包问题,你不清楚的地方,这里都讲了!| 动态规划经典问题 | 数据结构与算法_哔哩哔哩_bilibili 01背包问题 一维 代码随想录 视频讲解:带…

08、Kafka ------ 消息存储相关的配置-->消息过期时间设置、查看主题下的消息存活时间等配置

目录 消息存储相关的配置★ 消息的存储介绍★ 消息过期时间及处理方式演示:log.cleanup.policy 属性配置 ★ 修改指定主题的消息保存时间演示:将 test2 主题下的消息的保存时间设为10个小时1、先查看test2主题下的配置2、然后设置消息的保存时间3、然后再…

2024/1/14周报

文章目录 摘要Abstract文献阅读题目问题与创新方法A.CEMDAN方法B.LSTM网络C. CEEMDAN-LSTM模型 实验过程数据集与数据预处理参数设置评价指标和参数 实验结果 深度学习GRUGRU前向传播GRU的训练过程 总结 摘要 本周阅读了一篇基于CEEMDAN-LSTM的金融时间序列预测模型的文章&…

Spark---RDD(Key-Value类型转换算子)

文章目录 1.RDD Key-Value类型1.1 partitionBy1.2 reduceByKey1.3 groupByKeyreduceByKey和groupByKey的区别分区间和分区内 1.4 aggregateByKey获取相同key的value的平均值 1.5 foldByKey1.6 combineByKey1.7 sortByKey1.8 join1.9 leftOuterJoin1.10 cogroup 1.RDD Key-Value…

通过代理连接sftp

通过nginx代理连接sftp 1.问题描述2.代码实现3.nginx配置3.1 创建sftp.stream文件3.2 修改nginx配置 4.重启nginx生效 1.问题描述 问题是这样的。我们现在需要在微服务所在内网的A机器连接到外网的sftp,但是网络又不能直接到达。然后A机器到B机器是通过的&#xff…

设计模式之策略模式【行为型模式】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某…

新手入门:软件在测试过程中可能出现哪些问题?走,去看看~

对于很多测试新手来说,想要把自己的测试技术练得更精进,扎实自己的理论知识是必不可少的一门功课。下面,我们就一起来复习一下,那些让我们一知半解或者记不全的理论知识吧。 01 什么是软件测试? 最老套,但…

不要再搞混标准化与归一化啦,数据标准化与数据归一化的区别!!

数据标准化与归一化 1. 数据的标准化(Standardization):2. 数据的归一化(Normalization):总结(数据标准化和数据归一化的不同之处和相同之处) 1. 数据的标准化(Standardi…

【数据结构】二叉树问题总结

目录 1.二叉树前序遍历,中序遍历和后序的实现 2.层序遍历 3.求二叉树中的节点个数 4.求二叉树中的叶子节点个数 5.求二叉树的高度 6.求二叉树第k层节点个数 7.二叉树查找值为x的节点 8.单值二叉树 9.二叉树最大深度 10.翻转二叉树 11. 检查两颗树是否相同…

【Linux实用篇】Linux常用命令(2)

目录 1.3 拷贝移动命令 1.3.1 cp 1.3.2 mv 1.4 打包压缩命令 1.5 文本编辑命令 1.5.1 vi&vim介绍 1.5.2 vim安装 1.5.3 vim使用 1.6 查找命令 1.6.1 find 1.6.2 grep 1.3 拷贝移动命令 1.3.1 cp 作用: 用于复制文件或目录 语法: cp [-r] source dest ​ 说明: …

数据分析概述2(详细介绍机器学习

目录 1.名词解释:1.1算法和模型1.2参数和超参数 2.基础算法:3.高级算法:4.数据准备5.常用python包小结: 1.名词解释: 1.1算法和模型 算法:用于训练模型的方法,分为有监督学习、无监督学习、半…

Centos7安装K8S

Centos7安装K8S 安装过程中没有出现的错误可以往下 根据以前一些博主写的博客,在小阳翻了不下几十篇博客之后,我果断是放弃了,于是找到了官网地址,然后也有坑 1. 关闭防火墙 systemctl stop firewalld systemctl disable firew…