Spark 执行器、任务和分区

Posted

技术标签:

【中文标题】Spark 执行器、任务和分区【英文标题】:Spark executors, tasks and partitions 【发布时间】:2019-11-09 18:44:27 【问题描述】:

随着我不断阅读有关 Spark 架构和调度的在线资源,我开始变得更加困惑。一种资源说:The number of tasks in a stage is the same as the number of partitions in the last RDD in the stage。另一方面:Spark maps the number tasks on a particular Executor to the number of cores allocated to it。所以,第一个资源说如果我有 1000 个分区,那么无论我的机器是什么,我都会有 1000 个任务。在第二种情况下,如果我有 4 核机器和 1000 个分区,那该怎么办?我会有4个任务?那么数据是如何处理的呢?

另一个混淆:each worker can process one task at a time 和 Executors can run multiple tasks over its lifetime, both in parallel and sequentially。那么任务是顺序的还是并行的?

【问题讨论】:

【参考方案1】: 任务数由 RDD/DataFrame 的分区数给出 执行器可以并行处理的任务数由其核心数给出,除非 spark.task.cpus 配置为 1 以外的值(这是默认值)

因此,将任务视为必须处理的一些(独立)工作块。它们肯定可以并行运行

所以如果你有 1000 个分区和 5 个执行器,每个执行器有 4 个核心,那么通常会有 20 个任务并行运行

【讨论】:

以上是关于Spark 执行器、任务和分区的主要内容,如果未能解决你的问题,请参考以下文章

Spark---并行度和分区

Spark Streaming 如何在驱动程序和执行程序之间调度映射任务?

Spark 将任务分发给多个执行器

Spark 并行度

Spark 中的阶段是如何划分为任务的?

源码级解读如何解决Spark-sql读取hive分区表执行效率低问题