任务和分区之间是什么关系?

cdh*_*hit 9 apache-spark

我能说......么?

  1. Spark任务的数量等于Spark分区的数量?

  2. 执行程序运行一次(执行程序内部的批处理)是否等于一项任务?

  3. 每个任务只产生一个分区?

  4. (重复 1。)

YoY*_*oYo 10

并行度或可以并发运行的任务数由以下设置:

  • Executor Instance的数量(配置)
  • 每个 Executor 的核心数(配置)
  • 正在使用的分区数(编码)

实际并行度是较小的

  • executors * cores - 它给出了可用于运行任务的插槽数量
  • partitions - 每当插槽打开时,每个分区都会转换为一个任务。

在同一个执行器上运行的任务将共享同一个 JVM。这由广播功能使用,因为您只需要每个 Executor 的广播数据的一个副本,以便所有任务都能够通过共享内存访问它。

您可以在同一台机器或不同的机器上运行多个执行程序。Executors 是可扩展性的真正手段。

请注意,每个任务占用一个线程 ¹,并假定分配给一个核心 ²。

所以 -

  1. Spark任务数是否等于Spark分区数?

否(见前文)。

  1. 执行程序运行一次(执行程序内部的批处理)是否等于一项任务?

Executor 作为运行任务的环境启动。多个任务将在该 Executor(多线程)中并发运行。

  1. 每个任务只产生一个分区?

对于一个任务,它是一个分区输入,一个分区输出。但是,在任务之间可能会发生重新分区或洗牌/排序。

  1. Spark任务的数量等于Spark分区的数量?

与 (1.) 相同

(¹) 假设是在您的任务中,您自己不是多线程(永远不要这样做,否则核心估计将被关闭)。

(²) 请注意,由于超线程,每个物理核心可能有多个虚拟核心,因此每个核心可以有多个线程。您甚至可以在没有超线程的情况下在单个内核上处理多个线程(2 到 3 个)。

  • 我认为你的答案在#1 中并不清楚。任务总数等于分区数。不过,ACTIVE 任务等于可能的并行性。 (6认同)

Jac*_*ski 7

分区是 RDD 的一项功能,仅在设计时(调用操作之前)可用。

任务是Spark 应用程序中TaskSetper Stageper的一部分。ActiveJob

Spark任务的数量是否等于Spark分区的数量?

是的。

执行器运行一次(执行器内部的批处理)等于一个任务吗?

这递归地使用“执行器”,对我来说没有多大意义。

每个任务只产生一个分区?

几乎。

每个任务都会生成一个针对分区中的数据执行代码(为其创建代码)的输出。

Spark任务的数量等于Spark分区的数量吗?

几乎。

单阶段Spark任务的数量等于RDD分区的数量。