【问题标题】:Spark streaming RDD partitionsSpark 流式处理 RDD 分区
【发布时间】:2015-08-26 21:38:37
【问题描述】:

在 Spark 流中,是否可以将特定的 RDD 分区分配给集群中的特定节点(用于数据局部性?)

例如,我得到一个事件流 [a,a,a,b,b,b] 并有一个 2 节点 Spark 集群。

我希望所有 a 总是去节点 1,所有 b 总是去节点 2。

谢谢!

【问题讨论】:

  • 您使用哪种流类型?

标签: apache-spark spark-streaming


【解决方案1】:

这可以通过为您的 RDD 指定一个自定义分区器来实现。 RangeBasedPartitioner 将根据范围对 RDD 进行分区,但您可以使用自定义分区器实现任何分区逻辑。分区相对平衡通常有用/重要,并且根据您的输入数据,执行此类操作可能会导致问题(例如落后者等),因此请小心。

【讨论】:

  • 感谢您的回复。我知道一个自定义分区器(特别是 RangePartitioner)将允许我进行分区,以便 a 到这里,b 到那里,但我还想控制一个分区到 Spark 节点的分配。我在想,虽然 a 转到分区 1,但如果节点 1 忙于处理其他事情,Spark 可能仍会选择让节点 2 处理分区 1。
  • 如果这只是关于数据局部性,Spark 已经有基于数据局部性的调优,你可以通过更改 spark.locality.wait 来控制。
  • 酷,我会调查的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-07-08
  • 2017-03-16
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 2021-02-24
  • 1970-01-01
相关资源
最近更新 更多