我可以说吗?
Spark任务的数量是否等于Spark分区的数量?
执行程序运行一次(执行程序内的批处理)等于一个任务?
每个任务只生成一个分区?
(1的副本。)
答案 0 :(得分:2)
分区是RDD的一项功能,仅在设计时可用(在调用操作之前)。
任务是Spark应用程序中TaskSet
每Stage
个ActiveJob
的一部分。
Spark任务的数量是否等于Spark分区的数量?
是
执行程序运行一次(执行程序内的批处理)等于一个任务?
递归地使用“执行者”并且对我没有多大意义。
每个任务只生成一个分区吗?
几乎。
每个任务都会为分区中的数据生成执行代码(为其创建)的输出。
Spark任务的数量是否等于Spark分区的数量?
几乎。
单个阶段中的Spark任务的数量等于 RDD 分区的数量。
答案 1 :(得分:2)
并行度或可以同时运行的任务数由以下方式设置:
实际并行度较小
executors * cores
-给出可用于运行任务的插槽数量partitions
-每当打开插槽时,每个分区都会转换为一个任务。在同一执行程序上运行的任务将共享同一JVM。广播功能使用了此功能,因为每个执行者只需要一个广播数据副本即可执行所有任务,以便能够通过共享内存访问它。
您可以在同一台计算机或不同计算机上运行多个执行程序。执行程序是可伸缩性的真正手段。
请注意,每个任务占用一个线程¹,并假定分配给一个核心²。
所以-
- Spark任务的数量是否等于Spark分区的数量?
否(请参阅上一章)。
- 执行程序运行一次(执行程序内部的批处理)等于一项任务吗?
启动执行程序作为运行任务的环境。多个任务将在该Executor中同时运行(多个线程)。
- 每个任务只产生一个分区吗?
对于一项任务,它是一个分区,一个分区。但是,在两个任务之间可能会发生重新分区或重新排序/排序。
- Spark任务的数量等于Spark分区的数量?
与(1。)
(¹)假设您在任务中没有对自己进行多线程处理(绝对不要这样做,否则核心估计会关闭)。
(²)请注意,由于超线程,每个物理核心可能具有多个虚拟核心,因此每个核心可以具有多个线程。您甚至可以在一个内核上处理多个线程(2至3个)而无需超线程。