我有四个问题。 假设在 Spark 中有 3 个 worker 节点,每个 worker 节点有 3 个 executor,并且每个 executor 都有 3 个核心。 每个 executor 都有 5 GB 的内存(总共 6 个 executor、27 个核心和 15GB 的内存)。 如果:
我有 30 个数据分区。 每个分区的大小为 6GB。 由于每个核心执行一个分区/任务(每个分区一个任务),所以最佳情况是分区数等于核心数。 在这种情况下,由于分区大小大于可用的 executor 内存,每个 executor 核心将如何处理分区? 注意:我没有调用 cache() 或 persist(),只是在我的 RDD 上应用一些窄转换,例如 map() 和 filter()。
Spark 是否会自动尝试将分区存储在磁盘上? (我没有调用 cache() 或 persist(),但在调用操作之后仅发生了转换)
由于我有大于可用核心数(27)的分区(30),因此最多可以处理 27 个分区,剩下的 3 个分区会发生什么? 它们会等待空闲核心吗?
如果我调用了存储级别设置为 MEMORY_AND_DISK 的 persist(),则如果分区大小大于内存,则会将数据溢出到磁盘上?这些数据将存储在哪个磁盘上?worker 节点的外部 HDD 上吗?