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

剖析Spark Shuffle原理(图文详解)

Spark Shuffle

在这里插入图片描述
在这里插入图片描述

1.逻辑层面

从逻辑层面来看,Shuffle 是指数据从一个节点重新分布到其他节点的过程,主要发生在需要重新组织数据以完成某些操作时。

RDD血统
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Shuffle 触发条件:
在这里插入图片描述

  • reduceByKeygroupByKeyjoin 等操作需要对数据进行分组或聚合,这时需要 Shuffle 操作来重新分配数据。
  • distinctrepartition 等操作也会导致 Shuffle,因为它们需要改变数据的分布方式。

Shuffle 过程:

  • Shuffle Read:从之前的任务中读取数据。
  • Shuffle Write:将数据写入到磁盘上,以便后续的任务可以读取这些数据。
    在这里插入图片描述

Shuffle 操作的逻辑流程:

  • Stage 分割: Spark 将任务划分为多个 Stage,每个 Stage 包含多个 Task。
  • Shuffle 依赖: 一个 Stage 的输出作为下一个 Stage 的输入,这个过程需要 Shuffle 来完成。

在这里插入图片描述

2.物理层面

从物理层面来看,Shuffle 涉及到数据在集群中的实际传输和存储过程。

Shuffle 文件存储:

  • Shuffle 操作会将数据写入到磁盘上的临时文件中。这些文件通常存储在每个工作节点的本地磁盘上,用于在不同的任务之间传递数据。
  • 在 Spark 的默认配置下,这些文件会被存储在 /shuffle 目录下,但可以通过配置参数更改。
    在这里插入图片描述
    Shuffle 数据传输:
  • 网络传输: 在 Shuffle 操作中,数据需要从源节点传输到目标节点,这通常是通过网络完成的。这种传输会引入一定的网络开销,可能影响作业的整体性能。
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 数据压缩: 为了减少网络传输的开销,Spark 支持在 Shuffle 过程中对数据进行压缩。Spark 可以使用 snappylz4 等压缩算法来减少数据量。

Shuffle 操作的阶段:

  • Map阶段: 这个阶段是 Shuffle 的写入阶段,任务将数据从内存中写入到本地磁盘上的 Shuffle 文件中。每个任务会生成多个文件,这些文件按照分区进行组织。
  • Reduce阶段: 这个阶段是 Shuffle 的读取阶段,任务从本地磁盘上读取 Shuffle 文件中的数据,并在内存中合并这些数据以进行进一步的计算。
    在这里插入图片描述
    数据排序:
  • Shuffle 过程中的数据通常会被排序,以便进行有效的分组和聚合操作。排序操作也会在磁盘上进行,并在任务执行时加载到内存中。

在这里插入图片描述

Spark执行出错

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/news/314332.html

相关文章:

  • go 以太坊代币查余额
  • Python | Leetcode Python题解之第424题替换后的最长重复字符
  • 是德科技Keysight N4433D ECal模块 26.5GHz 4端口3.5毫米
  • 在python爬虫中xpath方式提取lxml.etree._ElementUnicodeResult转化为字符串str类型
  • RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验
  • 演示jvm锁存在的问题
  • Java集合(三)
  • Centos7安装chrome的问题
  • WebApi开发中依赖注入和RESTful 详解
  • OceanBase 的并发简述笔记
  • Navicate 链接Oracle 提示 Oracle Library is not loaded ,账号密码都正确地址端口也对
  • 【变化检测】基于ChangeStar建筑物(LEVIR-CD)变化检测实战及ONNX推理
  • php变量赋值javascipt变量
  • 13.面试算法-字符串常见算法题(二)
  • 【论文阅读】3D Diffuser Actor: Policy Diffusion with 3D Scene Representations
  • 人工智能与机器学习原理精解【25】
  • 【电路笔记】-运算放大器积分器
  • 数模方法论-整数规划
  • Python类及元类的创建流程
  • C#进阶-基于雪花算法的订单号设计与实现
  • [Python数据可视化] Plotly:交互式数据可视化的强大工具
  • 15.9 grafana-deployment-yaml讲解
  • 掌上高考爬虫逆向分析
  • [Python数据可视化]探讨数据可视化的实际应用:三个案例分析
  • lvs-nat模式实验详解
  • 【全网最全】2024年华为杯研赛A题成品论文获取入口(后续会更新)
  • 面试时被问的问题
  • 后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0917)
  • 新版ssh客户端无法连接旧版服务器sshd的方法
  • PHP基础语法入门指南