为什么Spark要将Map阶段的输出保存到本地磁盘?

2023-11-27

我试图深入了解 Spark Shuffle 过程。当我开始阅读时,我遇到了以下几点。

Spark 完成后将 Map 任务(ShuffleMapTask)输出直接写入磁盘。

我想了解以下关于 Hadoop MapReduce 的内容。

  1. 如果Map-Reduce和Spark都将数据写入本地磁盘,那么spark shuffle过程与Hadoop MapReduce有何不同?

  2. 既然数据在 Spark 中表示为 RDD,为什么这些输出不保留在节点执行器内存中呢?

  3. Hadoop MapReduce 和 Spark 的 Map 任务的输出有何不同?

  4. 如果有很多小的中间文件作为输出,spark 如何处理网络和 I/O 瓶颈?


首先,Spark 并不以严格的 Map-Reduce 方式工作,map除非必要,否则输出不会写入磁盘。向磁盘写入随机文件。

这并不意味着shuffle后的数据不会保留在内存中。 Spark中的Shuffle文件大部分都是这样写的避免在多个下游操作的情况下重新计算。为什么要写入文件系统?至少有两个交错的原因:

  • 内存是一种宝贵的资源,Spark 中的内存缓存是短暂的。需要时可以从缓存中逐出旧数据。
  • 如果没有必要,洗牌是一个昂贵的过程,我们希望避免。以使其在给定上下文的生命周期内持久存在的方式存储随机数据更有意义。

除了正在进行的低级优化工作和实现细节之外,Shuffle 本身并没有什么不同。它基于相同的基本方法,但也有其局限性。

任务与 Hadoo 地图有何不同?正如很好地说明的贾斯汀·皮霍尼不需要洗牌的多个转换被压缩在一个任务中。由于这些操作在标准 Scala 迭代器上进行,因此可以通过管道传输单个元素上的操作。

关于网络和 I/O 瓶颈,这里没有灵丹妙药。虽然 Spark 可以通过组合转换、在内存中缓存以及提供转换感知工作器首选项来减少写入磁盘或混洗的数据量,但它与任何其他分布式框架一样受到相同的限制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么Spark要将Map阶段的输出保存到本地磁盘? 的相关文章

  • Scala:什么是 CompactBuffer?

    我试图弄清楚 CompactBuffer 的含义 和迭代器一样吗 请解释其中的差异 根据 Spark 的文档 它是 ArrayBuffer 的替代方案 可以提供更好的性能 因为它分配的内存更少 以下是 CompactBuffer 类文档的摘
  • 如何设置SPARK_HOME变量?

    按照链接中的气泡水步骤进行操作http h2o release s3 amazonaws com sparkling water rel 2 2 0 index html http h2o release s3 amazonaws com
  • Scala Spark 包含与不包含

    我可以使用 contains 过滤 RDD 中的元组 如下所示 但是使用 不包含 来过滤 RDD 又如何呢 val rdd2 rdd1 filter x gt x 1 contains 我找不到这个的语法 假设这是可能的并且我没有使用Dat
  • 在 Spark 结构化流 2.3.0 中连接两个流时,左外连接不发出空值

    两个流上的左外连接不发出空输出 它只是等待记录添加到另一个流中 使用套接字流来测试这一点 在我们的例子中 我们想要发出具有 null 值的记录 这些记录与 id 不匹配或 且不属于时间范围条件 水印和间隔的详细信息如下 val ds1Map
  • Riak 在 MapReduce 查询中失败。使用哪种配置?

    我正在与 riak riak js 结合开发一个 nodejs 应用程序 并遇到以下问题 运行此请求 db mapreduce add logs run 正确返回存储在存储桶日志中的所有 155 000 个项目及其 ID logs 1GXt
  • Scala 案例类忽略 Spark shell 中的导入

    我希望这个问题有一个明显的答案 我刚刚升级到 Spark v2 0 并且遇到了一个奇怪的问题火花外壳 Scala 2 11 版本 如果我输入以下最小的 Scala import java sql Timestamp case class C
  • 如何根据条件添加新列(而不面临 JaninoRuntimeException 或 OutOfMemoryError)?

    尝试根据这样的条件创建具有多个附加列的 Spark 数据框 df withColumn name1 someCondition1 withColumn name2 someCondition2 withColumn name3 someCo
  • 如何将包含多个字段的大型 csv 加载到 Spark

    新年快乐 我知道以前曾提出 回答过此类类似的问题 但是 我的问题有所不同 我有大尺寸的 csv 有 100 个字段和 100MB 我想将其加载到 Spark 1 6 进行分析 csv 的标题看起来像附件sample http www roc
  • 从 PySpark RDD 中的每个组中取出前 N 个元素(不使用 groupByKey)

    我有一个如下所示的 RDD dataSource sc parallelize user1 3 blue user1 4 black user2 5 white user2 3 black user2 6 red user1 1 red 我
  • pyspark 将 twitter json 流式传输到 DF

    我正在从事集成工作spark streaming with twitter using pythonAPI 我看到的大多数示例或代码片段和博客是他们从Twitter JSON文件进行最终处理 但根据我的用例 我需要所有字段twitter J
  • 了解 Spark 中的 DAG

    问题是我有以下 DAG 我认为当需要洗牌时 火花将工作划分为不同的阶段 考虑阶段 0 和阶段 1 有些操作不需要洗牌 那么为什么 Spark 将它们分成不同的阶段呢 我认为跨分区的实际数据移动应该发生在第 2 阶段 因为这里我们需要cogr
  • Spark SQL sql("").first().getDouble(0) 给我不一致的结果

    我有下面的查询 它应该找到列值的平均值并返回一个数字的结果 val avgVal hiveContext sql select round avg amount 4 from users payment where dt between 2
  • Spark-1.6.1 上的 DMLC 的 XGBoost-4j

    我正在尝试在 Spark 1 6 1 上使用 DMLC 的 XGBoost 实现 我能够使用 XGBoost 训练我的数据 但在预测方面面临困难 我实际上想以在 Apache Spark mllib 库中完成的方式进行预测 这有助于计算训练
  • CouchDB 通过三个索引键进行查询和过滤

    我目前正在尝试按具有三个值的键进行排序和排序 但让我们从文档结构开始 id DOCIDGOESHERE01 type MESSAGE date 2011 08 24 06 49 02 author USERIDGOESHERE01 rece
  • 在 Windows 7 64 位中删除 Spark 临时目录时出现异常

    我正在尝试在 Windows 7 64 位中运行 Spark 作业的单元测试 我有 HADOOP HOME D winutils winutils path D winutils bin winutils exe 我运行了以下命令 winu
  • 如何将 Spark DataFrame 以 csv 格式保存在磁盘上?

    例如 这样的结果 df filter project en select title count groupBy title sum 将返回一个数组 如何将 Spark DataFrame 作为 csv 文件保存在磁盘上 Apache Sp
  • 在 Jupyter 笔记本中使用 PySpark 读取 XML

    我正在尝试读取 XML 文件 df spark read format com databricks spark xml load path to my xml 并收到以下错误 java lang ClassNotFoundExceptio
  • Talend 和 Apache Spark?

    我对 Talend 和 Apache Spark 在大数据生态系统中的定位感到困惑 因为 Apache Spark 和 Talend 都可以用于 ETL 有人可以用一个例子解释一下吗 Talend 是一种基于工具的大数据方法 通过内置组件支
  • 创建上下文后将 jar 文件添加到 pyspark

    我正在笔记本上使用 pyspark 并且不处理 SparkSession 的创建 我需要加载一个包含一些我想在处理 rdd 时使用的函数的 jar 您可以使用 jars 轻松完成此操作 但在我的特定情况下我无法做到这一点 有没有办法访问sp
  • Spark Shuffle 写入超慢

    为什么对于 1 6MB shuffle 写入和 2 4MB 输入 spark shuffle 阶段如此缓慢 为什么 shuffle 写入仅发生在一个执行器上 我正在运行一个 3 节点集群 每个集群有 8 个核心 火花用户界面 Code Ja

随机推荐

  • 错误:[MobX] 无法将“observable”应用于“Store@user”:找不到字段

    我有一个商店 class Store user User constructor makeObservable this user observable setUser action setUser user User undefined
  • Windows 窗体中的 C# 垂直标签

    是否可以在垂直方向上显示标签Windows 窗体 标签很简单 您所要做的就是覆盖Paint事件并垂直绘制文本 请注意 GDI 针对水平绘制文本进行了优化 如果旋转文本 即使旋转 90 度的倍数 它看起来会明显更糟 也许最好的办法是将文本 或
  • 添加到 NgModule.schemas 的 CUSTOM_ELEMENTS_SCHEMA 仍显示错误

    我刚刚从 Angular 2 rc4 升级到 rc6 但遇到了麻烦 我在控制台上看到以下错误 Unhandled Promise rejection Template parse errors cl header is not a know
  • 无法初始化 Spark 上下文

    我正在尝试在 Python 中初始化 Spark Context 变量 from pyspark import SparkContext SparkConf conf SparkConf setAppName test setMaster
  • 无法加载资源:帧加载再次中断

    我有从虚假链接下载图片的代码 我查看了其他评论 网站 但没有任何东西可以帮助我找到解决烦人问题的方法 加载资源失败 帧加载中断 我的 php 标头是在读取 GET 值之后 header Pragma public required head
  • 如何解决 azure keyvault 机密(未经授权)AKV10032:无效的颁发者。 Python 中的错误

    我正在使用azure keyvault 秘密在 Python 3 8 中管理我的资源秘密的包 开发于PyCharm 但是当我运行以下命令时 import os from azure keyvault secrets import Secre
  • 如何在移动设备上进行画布绘图

    我的画布绘图界面在桌面上完美运行 但在 iPhone 上无法运行 当我尝试画画时 它只会在我拇指所在的地方画出一个点 当我拖动拇指时 没有线条 页面继续滚动 Code var clearButton document getElementB
  • 我有这个错误“#1273 - 未知排序规则:'utf8mb4_0900_ai_ci'”

    CREATE TABLE payment methods payment method id tinyint 4 NOT NULL AUTO INCREMENT name varchar 50 NOT NULL PRIMARY KEY pa
  • 在具有 Root 权限的 Android 4.4.2 中启用 KioskMode

    我能够通过终止 KitKat 之前的版本来启用 kiosk 模式com android systemui过程 无论如何 这似乎在 KitKat 版本中不起作用 终止进程后 整个屏幕卡住了 我无法按任何按钮 在检查了 Play 商店中的类似应
  • 第二次单击时从元素中删除活动和焦点

    我正在尝试制作一个带有信息的交互式地图 当您单击一个点时 它会调整大小并显示一些联系人 这是因为该元素获得了 active and focus伪类 有什么方法可以在第二次单击元素时从元素中删除伪类吗 实际上 是否可以在再次单击元素时关闭元素
  • RAISERROR―如何与SqlException区分?

    我有一些 3 4 个存储过程 如果需要的话我可以修改它们 使用RAISERROR通知我的应用程序数据库方面的一些致命错误 其中一些存储过程是从 C 端执行的ExecuteNonQuery 而其他则执行ExecuteReader 目前 我将这
  • 将所有包含内容放在一个头文件中是个好主意吗?

    对于 C 来说 放入 C 头文件中的内容的最佳实践是什么 将跨多个源文件的程序使用的所有包含内容放在一个头文件中是否有用 几乎每个文件 即 stdio h 中都使用的包含怎么样 不会 它只会增加麻烦和开销 作为维护者 你面临的最大的痛苦之一
  • Maven - 未解决部署在 Artifactory 上的工件的传递依赖关系

    我有两个项目 A 和 B 其中 A 依赖于 B 我将 B 打包为 jar 并将其部署在 maven 服务器 artifactory 上 然后将该 jar 包含在 pom 文件中作为项目 A 的正常依赖项 B 的 jar 文件显示在项目 A
  • 使用 Google Apps 脚本修改绘图

    有没有人找到使用 Google Apps 脚本创建或更改绘图的支持 我已经浏览过谷歌文档 但我没有看到任何绘画课程 我发现了如何构建用户界面元素 但不是图纸 我希望将绘图作为文档或电子表格的一部分 但独立的绘图就足够了 直到今天 还无法执行
  • shell_exec 无需等待输出[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 中的异步 shell 执行 有没有办法使用 shell exec 而不等待命令完成 我想运行一个相当慢 复杂的程序 至少需要 10 分钟才能完成 我想通过 shell exec 或类似的东西来
  • 如何优雅地返回默认初始化的对象?

    我有一个如下所示的课程 class VeryVeryVeryLongTypeName bool is ok VeryVeryVeryLongTypeName is ok false VeryVeryVeryLongTypeName f Ve
  • 如何从 bootRun 传递 JVM 选项

    我正在开发与远程主机通信的简单 Spring Web 应用程序 我想在公司代理后面在本地测试它 我使用 Spring Boot gradle 插件 问题是如何指定 JVM 的代理设置 我尝试了几种方法来做到这一点 gradle Dhttp
  • 使用 Apache Beam 按键处理事件的总排序

    问题背景 我正在尝试从实时流中生成每个键的事件项的总 线性 顺序 其中顺序是事件时间 源自事件有效负载 Approach 我曾尝试使用流式传输来实现此目的 如下所示 1 设置一个非重叠的顺序窗口 例如时长5分钟 2 建立允许的迟到 可以丢弃
  • 自动日期/时间解析器,无需指定格式[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个java库 它可以将字符串解析为POJO而不指定格式 我研究过POjava 还有其他库可以做类似的事情吗 DateTime dateT
  • 为什么Spark要将Map阶段的输出保存到本地磁盘?

    我试图深入了解 Spark Shuffle 过程 当我开始阅读时 我遇到了以下几点 Spark 完成后将 Map 任务 ShuffleMapTask 输出直接写入磁盘 我想了解以下关于 Hadoop MapReduce 的内容 如果Map