【问题标题】:Spark executor & tasks concurrencySpark 执行器和任务并发
【发布时间】:2016-12-16 03:19:05
【问题描述】:

在 Spark 中,一个执行器可以同时运行多个任务,可能是 2 个或 5 个或 6 个。

Spark 如何计算(或计算)要在同一个执行器中同时运行的任务数,即一个执行器中可以同时运行多少个任务?

一个执行器可能正在执行一个任务,但另一个任务可能被放置在同一个执行器上并发运行?这样做的标准是什么?

执行程序具有固定数量的内核和内存。由于我们在 Spark 中没有指定任务的内存和核心要求,所以如何计算一个执行器中可以同时运行多少个?

【问题讨论】:

标签: apache-spark architecture internal


【解决方案1】:

在一个执行器中并行运行的任务数 = 配置的内核数。 您始终可以通过配置更改此数字。 执行器运行的任务总数(并行或顺序)取决于创建的任务总数(通过拆分数)和执行器数量。

在一个执行器中运行的所有任务共享配置的相同内存。在内部,它只启动与内核数量一样多的线程。

【讨论】:

    【解决方案2】:

    一个最可能的问题可能是您正在处理的 RDD 中的偏斜分区。如果 2-6 个分区上有大量数据,那么为了减少网络上的数据 shuffle,Spark 会尝试让 executor 处理驻留在自己节点上的本地数据。所以你会看到这 2-6 个执行器工作了很长时间,而其他执行器将在几毫秒内完成那里的数据。

    您可以在this stackoverflow question 中找到更多相关信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      相关资源
      最近更新 更多