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

embedded/2024/9/23 3:48:03/

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.ppmy.cn/embedded/115398.html

相关文章

【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤

问题描述 Azure Redis在使用的过程中,多次无规律的出现超时问题。抓取到客户端的异常错误后,想进一步的分析是何原因导致了如下异常呢? Timeout awaiting response (outbound0KiB, inbound0KiB, 5984ms elapsed, timeout is 5000ms), command…

Vue3.3新特性defineModel

defineModel的使用: defineModel选项可以帮我们省去很多麻烦 不仅需要上述操作,还需要进行一定的配置: 在vite.config.js中进行配置 defineModel是一个宏,所以不需要从vue中import导入,直接使用就可以了。这个宏可以用来声明一个…

Flask 设置session 自定义登录验证

"""1. 设置session# 设置session成功 重定向到首页session.permanent True # 设置会话过期时间session[info] usernamereturn redirect(url_for(index))2. 获取sessioninfo session.get(info, default0)return render_template(index.html, infoinfo)3. 设置…

小程序与APP的区别

目录 前言1. 开发方式与成本2. 运行环境与获取途径3. 功能复杂度与交互体验4. 更新与维护5. 推广与用户获取6. 占用空间与存储7. 可分享性总结 前言 小程序与APP作为两种不同类型的应用程序,它们在多个方面存在明显的区别。以下是对这些区别的详细阐述:…

【解决】chrome 谷歌浏览器,鼠标点击任何区域都是 Input 输入框的状态,能看到输入的光标

chrome 谷歌浏览器,鼠标点击任何区域都是 Input 输入框的状态,能看到输入的光标 今天打开电脑的时候,网页中任何文本的地方,只要鼠标点击,就会出现一个输入的光标,无论在哪个站点哪个页面都是如此。 我知道…

大尺寸卷积核的优缺点

大尺寸卷积核在卷积神经网络中具有一些独特的优缺点,具体如下: 优点: 更大的感受野: 大尺寸卷积核能够捕获更大的上下文信息,拥有更广的感受野。它可以一次性处理更大区域的特征信息,尤其在处理复杂的视觉…

P1706 全排列问题(dfs+递归)

1. x表示层数,第一层选了1执行for1,进入第二层选2并标记2,第二层只进行到for2,进入第三层选3并标记3,选完之后删除标记3。到现在完成第一组123 2.之后回到第二层释放2再进行for3,第二层选择3,第三层执行到…

Android中的Context

Android中的Context是一个核心概念,它代表了应用程序的运行环境和上下文信息。Context在Android开发中扮演着至关重要的角色,为应用程序提供了访问系统资源、启动组件、发送广播、获取系统服务等能力。下面,我将从Context的定义、种类、作用、…