我试图清楚地了解内存分配在纱线托管集群中是如何发生的。我知道有一堆执行器(一个执行器有自己的 JVM(,一个执行器在执行过程中可以有一个或多个 vcore。
我试图在 YARN 配置中将这种理解联系起来,其中事物被隔离为容器。每个容器实际上是一些 Vcore 和堆内存部分的混合。
有人可以确认一个执行程序是否获得一个容器,或者一个执行程序可以有多个容器。我阅读了一些关于 Cloudera 的关于 YARN 内存管理的文档,它似乎在说容器分配了一个执行器。
云时代内存管理
Executor在Yarn Container内运行,而不是跨容器运行。
YARN 资源管理器按需提供 Yarn 容器 - 在 Spark 应用程序开始时通过 YARN 动态资源分配。
一个 Yarn 容器只能有一个 Spark 执行器,但可以将 1 个或更多内核分配给执行器。
每个 Spark 执行器和驱动程序都作为其自己的 YARN 容器的一部分运行。
执行程序在给定的辅助角色上运行。
此外,一切都在应用程序的上下文中,因此应用程序在许多工作线程上都有执行器。
上运行 Spark 时,每个 Spark 执行器都作为 YARN 容器运行。