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

时间:2017-12-12 21:48:06

标签: apache-spark

我可以说吗?

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

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

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

  4. (1的副本。)

2 个答案:

答案 0 :(得分:2)

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

任务是Spark应用程序中TaskSetStageActiveJob的一部分。

  

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

  

执行程序运行一次(执行程序内的批处理)等于一个任务?

递归地使用“执行者”并且对我没有多大意义。

  

每个任务只生成一个分区吗?

几乎。

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

  

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

几乎。

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

答案 1 :(得分:2)

并行度或可以同时运行的任务数由以下方式设置:

  • 执行器实例数(配置)
  • 每个执行器的核心数(配置)
  • 正在使用的分区数(已编码)

实际并行度较小

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

在同一执行程序上运行的任务将共享同一JVM。广播功能使用了此功能,因为每个执行者只需要一个广播数据副本即可执行所有任务,以便能够通过共享内存访问它。

您可以在同一台计算机或不同计算机上运行多个执行程序。执行程序是可伸缩性的真正手段。

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

所以-

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

否(请参阅上一章)。

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

启动执行程序作为运行任务的环境。多个任务将在该Executor中同时运行(多个线程)。

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

对于一项任务,它是一个分区,一个分区。但是,在两个任务之间可能会发生重新分区或重新排序/排序。

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

与(1。)

(¹)假设您在任务中没有对自己进行多线程处理(绝对不要这样做,否则核心估计会关闭)。

(²)请注意,由于超线程,每个物理核心可能具有多个虚拟核心,因此每个核心可以具有多个线程。您甚至可以在一个内核上处理多个线程(2至3个)而无需超线程。