我想知道以下问题的答案。
如果没有执行者少于 RDD 中的分区,如何处理 RDD?
这是很常见的情况;实际上,您通常会配置您的作业,以便有比执行者更多的任务(请参阅https://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part- 2/ )
Spark 将为每个分区创建一个任务,并在可用的执行程序之间共享任务(请记住,执行程序可能有多个核心,因此它可以同时处理多个任务)。
因此,每个 executor 将处理它在分区中的份额,直到它们都被处理完。
Spark 还将尝试将任务分配给数据本地的执行程序,在可能的情况下(“locality” - 例如,参见What's the meaning of “Locality Level”on Spark cluster),以尽量减少需要移动的数据量在集群周围。