Dataproc 设置每个执行程序容器的 vcore 数

Dataproc set number of vcores per executor container

我正在构建一个将 运行 在 Dataproc 上运行的 spark 应用程序。我计划使用临时集群,并为应用程序的每次执行启动一个新集群。所以我基本上希望我的工作尽可能多地占用集群资源,并且我非常清楚这些要求。

我一直在尝试关闭动态分配并自己设置执行程序实例和内核。目前我正在使用 6 个实例和 30 个内核。

也许这更像是一个毛线问题,但我发现容器 vCore 和我的 spark 执行器核心之间的关系有点令人困惑。在 YARN 应用程序管理器 UI 中,我看到生成了 7 个容器(1 个驱动程序和 6 个执行程序),每个容器都使用 1 个 vCore。然而,在 spark 中,我看到执行者本身正在使用我指定的 30 个内核。

所以我很好奇执行者是否试图在本质上是 1 个核心的盒子上并行执行 30 个任务。或者 AM gui 中显示的 vCore 有误?

如果是前者,想知道设置此应用程序的最佳方法是什么,所以我最终为每个工作节点配备了一个执行程序,并且使用了所有 CPU。

YARN GUI中显示的vCore错误;这是 capacity-scheduler 的一个没有很好记录但已知的问题,这是 Dataproc 的默认设置。值得注意的是,在 Dataproc 上的默认设置下,YARN 仅根据内存而不是 CPUs 进行资源装箱;好处是这对于根据每个工作负载的需要在不同程度上超额订阅 CPUs 更通用,特别是如果某些东西是 IO 绑定的,但缺点是 YARN 不负责分割 CPU ] 固定用法

有关更改为 fair-scheduler 的一些讨论,请参阅 以查看在 YARN 中准确表示的 vcores 分配。但是,就您而言,这样做可能没有任何好处;让 YARN 在两个维度上进行 bin-packing 更像是一个 "shared multitenant cluster" 问题,只会使调度问题复杂化。

在您的情况下,设置应用程序的最佳方式就是忽略 YARN 对 vcores 的描述;如果每个工作节点只需要一个执行程序,则将执行程序内存大小设置为适合每个节点的 YARN 的最大值,并使每个执行程序的内核数等于每个节点的内核总数。