限制单个RDD的最大并行性,而不会减少分区的数量



是否有可能在不更改实际数量的分区数的情况下限制RDD级别的最大并发任务数?用例是不要淹没具有太多并发连接的数据库,而不会减少分区的数量。减少分区的数量会导致每个分区变得更大,最终无法控制。

我正在将其重新定位为"答案",因为我认为这可能是最少的黑客,可能会得到您想要的行为:

使用 mapPartitions(...)调用,在映射功能的开头,对全球可见状态(也许是rether-call,也许?)进行某种阻止。由于这将延迟整个RDD操作,因此您可能需要增加RDD完成的超时,以防止错误

Spark中分区的主要意义是提供并行性,您的要求是减少并行性!!!但是要求是真实的:)

少数分区的真正问题是什么?是否立即编写数据是在引起问题吗?如果是这样,您可以分解每个分区写作。

您可以将数据放在一些中间队列中并以受控方式处理?

一种方法可能是启用动态分配,并将最大执行者数量设置为您所需的最大并行性。

spark.dynamicAllocation.enabled true
spark.dynamicAllocation.maxExecutors <maximum>

您可以在此处介绍有关配置动态分配的更多信息:

https://spark.apache.org/docs/latest/job-scheduling.html#dynamic-resource-allocationhttps://spark.apache.org/docs/latest/configuration.html#scheduling

如果您要控制一个特定的计算,则可以通过编程来控制执行者的数量:

https://github.com/jaceklaskowski/mastering-apache-spark-book/blob/blob/master/spark-sparkcontext.adoc#dynamic-allocation

最新更新