是否可以在不更改实际分区数的情况下限制RDD级别的最大并发任务数?用例是在不减少分区数量的情况下,不会使具有太多并发连接的数据库瘫痪。减少分区数会导致每个分区变大并最终无法管理。
答案 0 :(得分:0)
Spark中分区的主要意义在于提供并行性,您的要求是降低并行性!但要求是真正的:)
分区数量少的真正问题是什么?是否一次写入太多数据会产生问题?如果是这种情况,您可以分解每个分区的写作。
您可以将数据放入某个中间队列并以受控方式处理吗?
答案 1 :(得分:0)
一种方法可能是启用动态分配,并将执行器的最大数量设置为所需的最大并行度。
spark.dynamicAllocation.enabled true
spark.dynamicAllocation.maxExecutors <maximum>
您可以在此处阅读有关配置动态分配的更多信息:
https://spark.apache.org/docs/latest/job-scheduling.html#dynamic-resource-allocation https://spark.apache.org/docs/latest/configuration.html#scheduling
如果您试图控制一个特定的计算,您可以尝试以编程方式控制执行程序的数量:
答案 2 :(得分:0)
我将此作为“回答”重新发布,因为我认为它可能是最不脏的黑客,可能会得到你想要的行为:
使用mapPartitions(...)
调用,并在映射函数的开头,对全局可查看状态(可能是REST调用?)进行某种阻塞检查,只允许一些最大数量的检查成功在任何给定的时间。由于这将延迟完整的RDD操作,您可能需要增加RDD完成的超时以防止错误