【发布时间】:2015-08-26 21:38:37
【问题描述】:
在 Spark 流中,是否可以将特定的 RDD 分区分配给集群中的特定节点(用于数据局部性?)
例如,我得到一个事件流 [a,a,a,b,b,b] 并有一个 2 节点 Spark 集群。
我希望所有 a 总是去节点 1,所有 b 总是去节点 2。
谢谢!
【问题讨论】:
-
您使用哪种流类型?
标签: apache-spark spark-streaming
在 Spark 流中,是否可以将特定的 RDD 分区分配给集群中的特定节点(用于数据局部性?)
例如,我得到一个事件流 [a,a,a,b,b,b] 并有一个 2 节点 Spark 集群。
我希望所有 a 总是去节点 1,所有 b 总是去节点 2。
谢谢!
【问题讨论】:
标签: apache-spark spark-streaming
这可以通过为您的 RDD 指定一个自定义分区器来实现。 RangeBasedPartitioner 将根据范围对 RDD 进行分区,但您可以使用自定义分区器实现任何分区逻辑。分区相对平衡通常有用/重要,并且根据您的输入数据,执行此类操作可能会导致问题(例如落后者等),因此请小心。
【讨论】:
spark.locality.wait 来控制。