首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >星星之火-可以控制分区到节点的位置吗?

星星之火-可以控制分区到节点的位置吗?
EN

Stack Overflow用户
提问于 2017-06-07 13:37:31
回答 1查看 1.3K关注 0票数 3

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

代码语言:javascript
复制
          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上的操作来说,这是很好的,但是当您使用跨越多个RDD的join()cogroup()操作时,这些节点之间的通信就成了瓶颈。对于多个RDDs,我将使用相同的分区器,并希望确保它们最终位于同一个节点上,这样后续的join()就不会花费很大。是否可以控制对工作人员(节点)分区的放置?

代码语言:javascript
复制
          desired
worker 1: [0-4]
worker 2: [5-9]
worker 3: [10-14]
worker 4: [15-19]
EN

回答 1

Stack Overflow用户

发布于 2017-06-07 14:05:10

对于多个RDDs,我将使用相同的分区器,并希望确保它们最终位于同一个节点上,这样后续的join()就不会花费很大。

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

是否可以控制将分区放置到工作人员(节点)

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

Spark和其他并行计算框架被设计用于容错。因此,这意味着如果一小部分工作者节点失败,那么将被替换为其他辅助节点,这个过程对用户应用程序来说是透明的。

如果允许用户显式地引用应用程序中的工人节点,这些抽象就会中断。控制RDD分区位置的唯一方法是为RDD分区器指定您自己的分区。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44414292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档