【问题标题】:Difference between executor and container in SparkSpark中执行器和容器的区别
【发布时间】:2019-01-30 06:17:41
【问题描述】:
我试图清楚地了解在纱线管理的集群中内存分配是如何发生的。我知道有一堆执行程序(一个执行程序有自己的 JVM),一个执行程序在执行期间可以有一个或多个 vcore。
我试图在 YARN 配置中将这种理解结合起来,其中事物被隔离为容器。每个容器实际上是一些 Vcore 和一小部分堆内存的混合。
有人可以确认一个执行者是否获得一个容器,或者一个执行者可以拥有多个容器。我在 Cloudera 上阅读了一些关于 YARN 内存管理的文档,似乎是说 Container 分配了一个 Executor。
Cloudera Memory Management
【问题讨论】:
标签:
apache-spark
hadoop-yarn
【解决方案1】:
Spark Executor 在 Yarn Container 内运行,而不是跨 Containers。
纱线容器由 YARN 资源管理器按需提供 - 在 Spark 应用程序启动时通过 YARN 动态资源分配。
一个 Yarn Container 只能有一个 Spark Executor,但可以为 Executor 分配 1 个或更多 Core。
每个 Spark 执行器和驱动程序都作为其自己的 YARN 容器的一部分运行。
Executors 在给定的 Worker 上运行。
此外,一切都在应用程序的上下文中,因此应用程序在许多 Worker 上都有执行器。
【解决方案2】:
在 YARN 上运行 Spark 时,每个 Spark 执行器都作为 YARN 容器运行。