Apache Spark:核心与执行者

时间:2019-06-26 09:09:48

标签: apache-spark hadoop kubernetes pyspark

在SO上被问过与核心与执行者有关的问题。

Apache Spark: The number of cores vs. the number of executors

由于每种情况都不同,我再次问类似的问题。

我正在运行一个CPU密集型应用程序,该应用程序具有相同数量的内核以及不同的执行程序。以下是观察结果。

资源管理器: Kubernetes

情况1::执行程序-6,每个执行程序的核心数量-2,执行程序内存-3g,数据处理量〜10GB,分区-36,作业时间: 75分钟

情况2::执行程序-4,每个执行程序的核心数量-3,执行程序内存-3g,数据处理量〜10GB,分区-36,作业时间: 101分钟

根据上述链接,每个执行者少于5个内核的任何对象都适合IO操作。

在我的两个案例中,核心都是相同的(12),但是两个作业花费的时间不同。有什么想法吗?

已更新

情况3::执行程序-12,每个执行程序的核心数量-1,执行程序内存-3g,数据处理量〜10GB,分区-36,作业时间: 81分钟

2 个答案:

答案 0 :(得分:1)

有许多可能的解决方案, 首先,并非所有节点的诞生都是平等的,这可能是不幸的工作和较慢的节点之一。 如果您执行具有更多节点但具有相同计算能力的混洗操作,则每秒会真正减慢您的工作。毕竟,在随机操作中,所有信息最终都将存储在单个节点上。事先使该节点具有较少的数据和较少的功率会降低操作速度。 但是我怀疑即使不进行随机操作,更多的节点也会慢一些,因为单个节点有更多的工作要做于其他节点。

说明:

让我们说我有一个节点,10个小时的工作和10个内核,所以我知道这将花费1个小时 但是,如果我有2个节点,每个节点有5个核心,并且可以说数据集以一个节点有5.5个小时的工作而其他节点有4.5个小时的工作的方式进行分区,则工作长度将是1.1个小时。

对于分布式计算,总会有开销的代价。因此通常在一台机器上使用相同资源进行处理通常会更快。

希望我想说的很清楚。

答案 1 :(得分:1)

在第一种情况下,您确实可以使用50%以上的内存(3g * 6 = 18g),而锁定问题更少(2个核心/执行器,而不是3个)。尝试使用1core / executor进行动态分配,看看会发生什么情况