YARN 是如何为 Spark 分区管理容器和 jvm-s 的?

How does YARN manage containers and jvm-s for Spark partitions?

我不清楚 spark 分区和 yarn 容器之间的关系。如果我有 3 个节点(--num-executors = 3)和 10 个分区,yarn 是否总共创建了 10 个容器(如果我理解正确,每个容器都是一个 jvm),并将它们分布在 3 个节点上?资源管理器是否曾经为一个分区启动一个容器,然后将其重新用于下一个分区?

来自 this Cloudera post:

When running Spark on YARN, each Spark executor runs as a YARN container. Where MapReduce schedules a container and fires up a JVM for each task, Spark hosts multiple tasks within the same container. This approach enables several orders of magnitude faster task startup time.

据我了解,YARN 为每个执行程序创建一个容器,然后将其并行或顺序分配给多个任务。关于您的示例,YARN 将创建总共 3 个容器,平均为每个容器分配 3-4 个任务(每个分区一个)。

奇怪的是,您描述的是 MapReduce 架构的常见行为。