大数据课程K6——Spark的Shuffle详解

news2025/1/24 1:28:11

文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州

 ▲ 本章节目的

⚪ 了解Spark的定义&&特点&&目的&&优缺点;

⚪ 掌握Spark的相关参数配置;

⚪ 掌握Hadoop的插件配置;

一、Spark Shuffle详解

1. 概述

Shuffle,就是洗牌。之所以需要Shuffle,还是因为具有某种共同特征的一类数据需要最终汇聚(aggregate)到一个计算节点上进行计算。这些数据分布在各个存储节点上并且由不同节点的计算单元处理。

以最简单的Word Count为例,其中数据保存在Node1、Node2和Node3。

经过处理后,这些数据最终会汇聚到Nodea、Nodeb处理,如下图所示:

 这个数据重新打乱然后汇聚到不同节点的过程就是Shuffle。但是实际上,Shuffle过程可能会非常复杂:

1. 数据量会很大,比如单位为TB或PB的数据分散到几百甚至数千、数万台机器上。

2. 为了将这个数据汇聚到正确的节点,需要将这些数据放入正确的Partition,因为数据大小经常大于节点的内存,因此这个过程中可能会发生多次硬盘续写。

3. 为了节省带宽,这个数据可能需要压缩,如何在压缩率和压缩解压时间中间做一个比较好的选择?

4. 数据需要通过网络传输,因此数据的序列化和反序列化也变得相对复杂。

一般来说,每个Task处理的数据可以完全载入内存(如果不能,可以减小每个Partition的大小),因此Task可以做到在内存中计算。但是对于Shuffle来说,如果不持久化这个中间结果,一旦数据丢失,就需要重新计算依赖的全部RDD。因此有必要持久化这个中间结果。所以这就是为什么Shuffle过程会产生文件的原因。

如果Shuffle过程不落地,①可能会造成内存溢出,②当某分区丢失时,会重新计算所有父分区数据。

2. Shuffle Write

Shuffle Write,即数据时如何持久化到文件中,以使得下游的Task可以获取到其需要处理的数据的(即 Shuffle Read)。在Spark 0.8之前,Shuffle Write是持久化到缓存的,但后来发现实际应用中&#x

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

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

相关文章

QtC++ 设计模式(四)——策略模式

策略模式 序言理解源码 序言 还是参考的菜鸟教程,会C的还是看C的方式来得舒服。 . 理解 使用符合UML规范的便于理解和回忆,接口其实就是普通的基类 . 源码 strategy.h /// 策略 class Strategy { public:virtual ~Strategy();/*** brief 计算* p…

AIGC ChatGPT 完成多仪表盘完成率分析

各组完成率的统计与分析的这样一个综合案例 可以使用HTML ,JS,Echarts 来完成制作 我们可以借助于AIGC,ChatGPT 人工智能来帮我们完成代码的输出。 在ChatGPT中我们只需要发送指令就可以了。 例如:请使用HTMl与JS,…

蝴蝶翻转

蝴蝶翻转 实现一 在计算机科学和数字信号处理中,蝴蝶操作是一种常用于快速傅里叶变换(FFT)的操作。在蝴蝶算法中,输入数据的一部分通过特定的运算结构进行重新排列和组合,以便在计算FFT时实现高效处理。 蝴蝶操作的…

【seaweedfs】3、f4: Facebook’s Warm BLOB Storage System 分布式对象存储的冷热数据

论文地址 Facebook的照片、视频和其他需要可靠存储和快速访问的二进制大型对象(BLOB)的语料库非常庞大,而且还在继续增长。随着BLOB占用空间的增加,将它们存储在我们传统的存储系统-- Haystack 中变得越来越低效。为了提高我们的存储效率(以Blob的有效复…

线程池的概念及实现原理

本篇是对前面线程池具体实现过程的补充,实现过程可参考 线程池的实现全过程v1.0版本(手把手创建,看完必掌握!!!)_竹烟淮雨的博客-CSDN博客 线程池的实现v2.0(可伸缩线程池&#xf…

04-Numpy基础-利用数组进行数据处理

NumPy数组使你可以将许多种数据处理任务表述为简洁的数组表达式(否则需要编 写循环)。用数组表达式代替循环的做法,通常被称为矢量化。一般来说,矢量化 数组运算要比等价的纯Python方式快上一两个数量级(甚至更多&…

Python代理池健壮性测试 - 压力测试和异常处理

大家好!在构建一个可靠的Python代理池时,除了实现基本功能外,我们还需要进行一系列健壮性测试来确保其能够稳定运行,并具备应对各种异常情况的能力。本文将介绍如何使用压力测试工具以及合适的异常处理机制来提升Python代理池的可…

vue+file-saver+xlsx+htmlToPdf+jspdf实现本地导出PDF和Excel

页面效果如下(echarts图表按需添加,以下代码中没有) 1、安装插件 npm install xlsx --save npm install file-saver --save npm install html2canvas --save npm install jspdf --save2、main.js引入html2canvas import htmlToPdf from …

Tomcat的安装与介绍

首先我们先了解一下什么是服务器?什么是服务器软件? 什么是服务器?安装了服务器软件的计算机。 什么是服务器软件? 服务器软件是一种运行在服务器操作系统上,用于接收和处理客户端请求,并提供相应服务和资…

【Go 基础篇】Go语言闭包详解:共享状态与函数式编程

介绍 在Go语言中,闭包是一种强大的编程特性,它允许函数内部包含对外部作用域变量的引用。闭包使得函数可以捕获和共享外部作用域的状态,实现更加灵活和复杂的编程模式。本篇博客将深入探讨Go语言中闭包的概念、用法、实现原理以及在函数式编…

【Linux】冯诺依曼体系结构思想

冯诺依曼体系结构 冯诺依曼体系结构冯诺依曼体系结构的五大部分冯诺依曼体系结构的运行过程存储器中的木桶效应扩展:计算机存储设备金字塔实例:qq聊天数据传输过程 🍀小结🍀 🎉博客主页:小智_x0___0x_ &…

【VMware】CentOS 设置静态IP(Windows 宿主机)

文章目录 1. 更改网络适配器设置2. 配置虚拟网络编辑器3. 修改 CentOS 网络配置文件4. ping 测试结果 宿主机:Win11 22H2 虚拟机:CentOS-Stream-9-20230612.0 (Minimal) 1. 更改网络适配器设置 Win R:control 打开控制面板 依次点击&#x…

婉约而深刻:二叉树的中序遍历之旅

力扣题目传送门https://leetcode.cn/problems/binary-tree-inorder-traversal/ 二叉树 在这篇文章中,我们将深入探讨题目 "94. 二叉树的中序遍历" 的内涵与解题方法。这个问题引导我们遍历一棵二叉树,以中序的方式呈现节点顺序,从…

windows安装新openssl后依然显示旧版本

1、Windows环境下升级openssl后,通过指令openssl version -a查看版本号: 这个版本号是以前的老版本,不知道在哪里 2、网上找了老半天也没找到答案,最后通过指令 where openssl 才找到原来的openssl在哪里,把老的卸载掉…

【安全】原型链污染 - Hackit2018

目录 准备工作 解题 代码审计 Payload 准备工作 将这道题所需依赖模块都安装好后 运行一下,然后可以试着访问一下,报错是因为里面没内容而已,不影响,准备工作就做好了 解题 代码审计 const express require(express) var hbs require…

aqs的今生

《AQS的前世,从1990年的论文说起》中我们已经对AQS做了简单的介绍,并学习了先于AQS出现的3种基于排队思想的自旋锁。今天我们深入到AQS的设计中,探究Doug Lea是如何构建JUC框架基础组件的。不过在正式开始前,我们先来回顾上一篇中…

Microsoft Excel整合Python:数据分析的新纪元

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

单片机UART一对多:同时读取多个传感器基于modbus协议

文章目录 背景MODBUS协议介绍UART接口改一对多参考链接 背景 很多传感器现在都做成了串口模块,如激光测距传感器TOF050,在开发时使用串口功能模块不仅大大加快了我们的开发进度,还能降低功能模块直接的耦合度,专业是功能交给专业…

postman访问ruoyi后台接口

打开若依页面,登录进去,F12打开控制台,选一个后台服务,把下图两个节点,补到postman请求header里面即可

gradio使用transformer模块demo介绍2:Images Computer Vision

文章目录 图像分类 Image Classification图像分割 Image Segmentation图像风格变换 Image Transformation with AnimeGAN3D模型 3D models 图像分类 Image Classification import gradio as gr import torch import requests from torchvision import transformsmodel torch.…