我有类似Spark SQL的
select ...
from A
join B on A.k = B.k
join C on A.k = C.k
A有2k个分区; B有7个分区;而C未分区。
我将最大动态执行程序数设置为50。但是,应用程序有<20个执行程序。当两个阶段并行运行时,一个阶段使用5个执行程序,而另一个阶段使用6个执行程序。
我应该增加B和C的分区号以使查询更多并行化吗?
答案 0 :(得分:1)
当然,由于分区不均匀会产生影响,它们是: 并发性降低–您没有利用并行的优势。可能有处于理想状态的工作节点。数据倾斜和资源利用不当。 您的数据可能在一个分区上倾斜,因此您的一个工作人员可能比其他工作人员做得更多,因此该工作人员可能会遇到资源问题。
由于在分区数量之间需要权衡,因此分区数量应正确,否则任务调度可能比实际执行时间花费更多时间。 根据群集的大小和数据,通常应该有100到10K个分区。
下限–集群中2倍于应用程序的内核数 上限–任务应花费100毫秒以上的时间来执行。如果所花费的时间少于分区数据太小,并且应用程序可能在安排任务上花费了更多时间。