【问题标题】:does the numbers of partitions of all joined tables affect the maximal executors?所有连接表的分区数是否会影响最大执行者?
【发布时间】:2019-03-04 17:54:41
【问题描述】:
我有一个类似 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。但是,应用程序获得了
是否应该增加 B 和 C 的分区数以使查询更加并行化?
【问题讨论】:
标签:
apache-spark
pyspark
apache-spark-sql
【解决方案1】:
当然,由于分区不均匀会产生影响,它们是:
更少的并发性——你没有使用并行的优势。可能存在理想的工作节点。数据倾斜和资源利用不当。
您的数据可能在一个分区上出现偏差,因此您的一名工作人员可能比其他工作人员做得更多,因此该工作人员可能会出现资源问题。
由于分区计数之间存在权衡,因此它们的数量应该正确,否则任务调度可能需要比实际执行时间更多的时间。
您通常应该有 100 到 10K 个分区,具体取决于集群大小和数据。
下限 – 2 X 集群中可供应用程序使用的核心数
上限 - 任务应该花费 100 多毫秒的时间来执行。如果它花费的时间少于您的分区数据太小并且您的应用程序可能会花费更多时间来安排任务。