YARN 上 GCP Dataproc 上的自动缩放指标

Posted

技术标签:

【中文标题】YARN 上 GCP Dataproc 上的自动缩放指标【英文标题】:Autoscaling metrics on GCP Dataproc on YARN 【发布时间】:2021-01-06 04:52:46 【问题描述】:

为什么 GCP Dataproc 的集群基于 内存请求NOT 核心使用 YARN 作为 RM 自动扩展?是 Dataproc 或 YARN 的限制还是我遗漏了什么?

参考:https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/autoscaling

自动缩放将 Hadoop YARN 配置为基于 YARN 内存请求而非 YARN 核心请求来调度作业。

自动缩放以以下 Hadoop YARN 指标为中心:

分配的内存是指在整个集群中运行容器所占用的总 YARN 内存。如果有 6 个正在运行的容器最多可以使用 1GB,则分配的内存为 6GB。

可用内存是集群中未被分配容器使用的 YARN 内存。如果所有节点管理器有 10GB 的内存和 6GB 的分配内存,则有 4GB 的可用内存。如果集群中有可用(未使用)内存,自动扩缩可能会从集群中移除工作人员。

待处理内存是待处理容器的 YARN 内存请求的总和。待处理的容器正在等待空间在 YARN 中运行。仅当可用内存为零或太小而无法分配给下一个容器时,挂起的内存才非零。如果有待处理的容器,自动缩放可能会将工作人员添加到集群中。

【问题讨论】:

【参考方案1】:

目前这是 Dataproc 的限制。默认情况下,YARN 会根据内存请求为容器查找插槽,并完全忽略核心请求。所以在默认配置下,Dataproc 只需要根据 YARN 挂起/可用内存进行自动扩缩即可。

肯定有您希望通过运行更多容器来超额订阅 YARN 核心的用例。例如,即使您只有 4 个物理内核,我们的默认 distcp 配置也可能在节点管理器上运行 8 个低内存容器。每个 distcp 任务主要受 I/O 限制,不会占用太多内存。所以我认为保留仅基于内存调度的默认设置是合理的。

如果您也对配置基于 YARN 内核的自动缩放感兴趣,我怀疑您已打开 YARN 的 DominantResourceCalculator 以使 YARN 同时在内存和内核上进行调度。在我们的路线图中支持DominantResourceCalculator。但我们一直优先考虑自动缩放稳定性修复。请随时私下与 dataproc-feedback@google.com 联系,向我们详细介绍您的使用案例。

【讨论】:

以上是关于YARN 上 GCP Dataproc 上的自动缩放指标的主要内容,如果未能解决你的问题,请参考以下文章

如何在自动扩缩 GCP Dataproc 时了解初级工作者?

带有presto的GCP dataproc - 有没有办法使用pyhive通过python远程运行查询?

在不使用 Dataproc 的情况下将 GCP 与 PySpark 连接

GCP Dataproc 自定义图像 Python 环境

GCP 托管实例组不会缩放到零

GCP Dataproc 节点中没有资源来启动新的 SparkSession