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

Spark 磁盘作用

Spark 磁盘作用

  • 磁盘作用
  • 性能价值
    • 失败重试
    • ReuseExchange

Spark 导航

磁盘作用

临时文件、中间文件、缓存数据,都会存储到 spark.local.dir

  • 在 Shuffle Map 时, 当内存空间不足,就会溢出临时文件存储到磁盘上
  • 溢出的临时文件一起做归并计算,得到 Shuffle 中间文件存储到磁盘上
  • 缓存分布式数据集 : DISK 的存储模式,会把内存中放不下的数据缓存到磁盘

在这里插入图片描述

性能价值

spark.local.dir 配置到 SDD 或访问高效的存储系统

磁盘复用 :

  • 给执行性能带来更好的提升
  • 磁盘复用 : Shuffle Write 产生的中间文件被多次利用

失败重试

一旦某个计算环节出错,就会触发失败重试。失败重试的触发点是距离最新的 Shuffle 的中间文件

当 RDD4 的计算任务失败时,会从 RDD4 向前回溯,回溯到 RDD3 (RDD2 输出的中间文件 ) ,并重新开始计算

在这里插入图片描述

ReuseExchange

ReuseExchange 是 Spark SQL 优化一种 : 相同或相似的物理计划能共享 Shuffle 中间文件

ReuseExchange 机制的触发条件:

  • 多个查询所依赖的分区规则要与 Shuffle 中间数据的分区规则保持一致
  • 多个查询所涉及的字段(Attributes)要保持一致

在这里插入图片描述

统计不同用户的 PV(Page Views,页面浏览量)、UV(Unique Views,网站独立访客),并把两项统计结果合并:

//版本1:分别计算PV、UV,然后合并
// Data schema (userId: String, accessTime: Timestamp, page: String)
val filePath: String = _
val df: DataFrame = spark.read.parquet(filePath)val dfPV: DataFrame = df.groupBy("userId").agg(count("page").alias("value"))
val dfUV: DataFrame = df.groupBy("userId").agg(countDistinct("page").alias("value"))val resultDF: DataFrame = dfPV.Union(dfUV)
// Result样例
| userId | metrics | value |
| user0 | PV | 25 |
| user0 | UV | 12 |

文件扫描/Shuffle 两次 :

在这里插入图片描述

以 userId 为分区 ,调用 repartition :

//版本2:分别计算PV、UV,然后合并
// Data schema (userId: String, accessTime: Timestamp, page: String)
val filePath: String = _
val df: DataFrame = spark.read.parquet(filePath).repartition($"userId")val dfPV: DataFrame = df.groupBy("userId").agg(count("page").alias("value"))
val dfUV: DataFrame = df.groupBy("userId").agg(countDistinct("page").alias("value"))val resultDF: DataFrame = dfPV.Union(dfUV)
// Result样例
| userId | metrics | value |
| user0 | PV | 25 |
| user0 | UV | 12 |

ReuseExchange :

  • 数据源只需扫描一遍
  • Shuffle 也只发生一次

在这里插入图片描述

http://www.lryc.cn/news/31967.html

相关文章:

  • 三、Spark 内存管理
  • Java 面试常见项目问题回答
  • 文件上传和下载(原生JS + SpringBoot实现)
  • 【C语言学习笔记】:安全性
  • Linux - 磁盘存储管理 磁盘引入
  • 分割std::string成多个string
  • 3月多国更新进出口产品规定
  • nacos相关面试题
  • Linux基础命令-groupmems管理组群的成员
  • css系统化学习
  • AI的简单介绍
  • 【Linux】-- 进程间通讯
  • STM32模拟SPI时序控制双路16位数模转换(16bit DAC)芯片DAC8552电压输出
  • 基于intel x86+fpga智能驾驶舱和高级驾驶辅助系统硬件设计(二)
  • oneblog_justauth_三方登录配置【Github】
  • 自行车轮胎充气泵PCBA方案
  • 200 22222
  • <JVM上篇:内存与垃圾回收篇>13 - 垃圾回收器
  • 广义状态平均法功率变换器建模分析
  • 基于Spring Boot的快递管理系统
  • nerdctl不完全使用指南(开发者)
  • 【独家】华为OD机试 - 分糖果(C 语言解题)
  • 八股总结(二)计算机网络与网络编程
  • ChatGPT  一本正经的胡说八道 那也看看原理吧
  • ChatGPT:一个人机环境系统交互的初级产品
  • PaddlePaddle本地环境安装(windows11系统)
  • DBeaver 超级详细的安装与使用
  • 计算机网络的166个概念 你知道几个第七部分
  • 海尔三翼鸟:生态聚拢的密度,决定场景落地速度
  • 前端基础知识