Spark - 是否可以控制分区到节点的放置?

2024-03-28

在 Spark 中,自定义Partitioner可以为 RDD 提供。通常,生成的分区会随机分配给一组工作人员。例如,如果我们有 20 个分区和 4 个工作线程,则每个工作线程将(大约)获得 5 个分区。然而,放置分区到工作节点(节点)看起来是随机的,如下表所示。

          trial 1    trial 2
worker 1: [10-14]    [15-19]
worker 2: [5-9]      [5-9]  
worker 3: [0-4]      [10-14]
worker 4: [15-19]    [0-4]  

这对于单个 RDD 上的操作来说很好,但是当你使用join() or cogroup()跨多个 RDD 的操作时,这些节点之间的通信成为瓶颈。我会为多个 RDD 使用相同的分区器,并希望确保它们最终位于同一个节点上,这样后续的 join() 的成本就不会很高。是否可以控制工作人员(节点)的分区放置?

          desired
worker 1: [0-4]
worker 2: [5-9]
worker 3: [10-14]
worker 4: [15-19]

我会为多个 RDD 使用相同的分区器,并希望确定 它们将最终位于同一节点上,因此后续的 join() 不会 成本高昂。

这是处理 RDD 之间连接的正确方法,以确保要连接的记录位于同一分区/执行器中。

是否可以控制工人的分区放置 (节点)

不可能为每个分区显式指定工作节点。这将打破为 Spark 或任何其他并行计算框架(如 Map-Reduce/Tez 等)定义的并行计算的抽象。

Spark 和其他并行计算框架旨在容错。因此,这意味着如果一小部分工作节点发生故障,则会被其他工作节点替换,并且此过程对用户应用程序透明地发生。

如果允许用户在应用程序中显式引用工作节点,这些抽象就会被破坏。管理 RDD 分区放置的唯一方法是为 RDD 分区程序指定您自己的分区。

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

Spark - 是否可以控制分区到节点的放置? 的相关文章

随机推荐

  • 使用 Ruby on Rails 进行 Postgres 公共表表达式查询

    我试图找到在 Rails 应用程序中使用通用表表达式进行 Postgres 查询的最佳方法 因为我知道 ActiveRecord 显然不支持 CTE 我有一张桌子叫user activity transitions其中包含一系列正在启动和停
  • 如何将数据帧转换为R中的ID列表? [复制]

    这个问题在这里已经有答案了 我整个晚上都在努力弄清楚如何在 R 中做到这一点 基本上我有一个如下的数据集 id lt c 1 1 1 2 2 3 3 3 3 label lt c a b c b d a c d e mydata lt as
  • 在固定超时内缓存单个对象的最佳方法是什么?

    Google Guava 有 CacheBuilder 允许使用过期密钥创建 ConcurrentHash 从而允许在固定 tiemout 后删除条目 但是我只需要缓存某种类型的一个实例 使用 Google Guava 在固定超时内缓存单个
  • Rxjs 主题下一个或 onNext

    我对 rxjs 很陌生 请耐心等待 例如在本教程中http blog angular university io how to build angular2 apps using rxjs observable data services
  • 无法在 Ubuntu 12.10 上安装 pg gem

    我使用的是 Ubuntu 12 10 64 位 并且安装了以下软件包 dpkg get selections grep postgre output postgresql postgresql 9 1 postgresql client p
  • 在 Java 中对月份和年份进行排序的最有效方法

    我有一个列表 其中包含字符串格式的日期 MON YYYY 我需要对此列表进行排序 到目前为止我遵循的方法是读取列表并以日期格式转换字符串并使用比较选项 但是我我没有得到想要的结果 代码片段 List
  • 检测受密码保护的 PPT 和 XLS 文档

    我找到了这个答案https stackoverflow com a 14336292 1537195 https stackoverflow com a 14336292 1537195这提供了检测 DOC 和 XLS 文件密码保护的好方法
  • 追加在 for 循环中生成的 pandas 数据帧

    我正在 for 循环中访问一系列 Excel 文件 然后我将 Excel 文件中的数据读取到 pandas 数据框中 我不知道如何将这些数据框附加在一起 然后将数据框 现在包含所有文件中的数据 保存为新的 Excel 文件 这是我尝试过的
  • Python Reddis 队列 ValueError:worker 无法处理 __main__ 模块中的函数

    我正在尝试使用 python rq 在 redis 中排队一项基本作业 但它会抛出此错误 ValueError 函数来自main模块无法被工作人员处理 这是我的程序 import requests def count words at ur
  • Oracle:DDL 和事务回滚

    Oracle DDL 创建 更改 是否可以像 MS SQL 中那样具有事务性 从 2005 年开始 DDL 在 Oracle 中不是事务性的 来自11 2 doc http docs oracle com cd E25054 01 serv
  • 使用 javascript regexp 查找第一个和最长的匹配

    我有一个像下面的简化示例一样的正则表达式 var exp he hell 当我在字符串上运行它时 它会给我第一个匹配项 fx var str hello world var match exp exec str match contains
  • 将 CNN 的输出传递给 BILSTM

    我正在开发一个项目 其中我必须将 CNN 的输出传递给双向 LSTM 我创建了如下模型 但它抛出 不兼容 错误 请让我知道哪里出了问题以及如何解决这个问题 model Sequential model add Conv2D filters
  • requestAnimationFrame 仅被调用一次

    我正在尝试在 Ionic 2 应用程序中使用 ThreeJS 实现非常基本的动画 基本上是尝试旋转一个立方体 但立方体没有旋转 因为 requestAnimationFrame 仅在渲染循环内执行一次 I m able to see onl
  • 如何设置 Eclipse CDT 使用 GCC-4 而不是 GCC?

    如何设置 Eclipse CDT 使用 GCC 4 而不是 GCC 我问这个问题是因为我使用 Windows 64 位和 Cygwin 而 gcc exe 不起作用 我需要配置 Eclipse CDT 以使用 gcc 4 exe 但我不知道
  • 将 CSV 文件或 Excel 电子表格转换为 RESX 文件

    我正在寻找针对我遇到的问题的解决方案或建议 我有一堆需要本地化的 ASPX 页面 还有一堆需要支持 6 种语言的文本 进行翻译的人员无法访问 Visual Studio 最简单的工具可能是 Excel 如果我们使用 Excel 甚至导出到
  • 带有 firebase crashlytics 的 Hermes 包的反应本机源图

    我想从react native应用程序中读取crashlytics报告 但它在firebase控制台中根本不可读 Android 的崩溃示例如下所示 Non fatal Exception io invertase firebase cra
  • 使用 AST 解析器提取类实现的接口

    我正在使用 AST 解析器编译项目源代码 我可以通过什么方式提取类层次结构信息 即它是否正在实现任何接口或从另一个类扩展 您可以访问TypeDeclaration节点并从中获取类型绑定 ITypeBinding typeBind typDe
  • Scala,让我的循环更加实用

    我正在尝试减少像 Java 一样编写 Scala 2 8 的程度 这是我遇到的问题的简化 您能否对我的解决方案提出 更实用 的改进建议 变换地图 val inputMap mutable LinkedHashMap 1 gt a 2 gt
  • 在 Bash 中执行时间戳比较的最佳方法是什么

    我有一个警报脚本 我试图阻止它向我发送垃圾邮件 因此我想设置一个条件 如果在过去一小时内发送了警报 则不再发送警报 现在我有一个 cron 作业 每分钟检查一次条件 因为我需要在满足条件时快速收到警报 但我不需要每分钟都收到电子邮件 直到问
  • Spark - 是否可以控制分区到节点的放置?

    在 Spark 中 自定义Partitioner可以为 RDD 提供 通常 生成的分区会随机分配给一组工作人员 例如 如果我们有 20 个分区和 4 个工作线程 则每个工作线程将 大约 获得 5 个分区 然而 放置分区到工作节点 节点 看起