扩缩 Dataproc 集群

在创建 Dataproc 集群后,您可以通过增加或减少集群中的主要或辅助工作器节点的数量(横向伸缩)来调整(“伸缩”)集群。即使作业正在 Dataproc 集群上运行,您也可以随时扩缩该集群。您无法更改现有集群的机器类型(垂直伸缩)。如需纵向扩容,请使用受支持的机器类型创建集群,然后将作业迁移到新集群。

为何要扩缩 Dataproc 集群?

  1. 增加工作器的数量,以使作业更快运行
  2. 减少工作器的数量,以节省资金(请参阅安全停用,通过此方式缩小集群可避免丢失正在进行的工作)。
  3. 增加节点数量以扩展可用的 Hadoop 分布式文件系统 (HDFS) 存储空间

由于集群可以扩缩多次,因此,您可能需要在某个时间增加/减小集群大小,日后再减小/增加其大小。

使用扩缩功能

您可以通过三种方式扩缩您的 Dataproc 集群:

  1. 使用 gcloud CLI 中的 gcloud 命令行工具。
  2. Google Cloud 控制台中修改集群配置。
  3. 使用 REST API

添加到集群的新工作器将使用与现有工作器相同的机器类型。例如,如果集群是通过使用 n1-standard-8 机器类型的工作器创建的,则新工作器也将使用 n1-standard-8 机器类型。

您可以扩缩主要工作器或辅助(抢占式)工作器的数量,或者同时扩缩两者。例如,如果您只扩缩抢占式工作器的数量,主要工作器的数量将保持不变。

gcloud

如需使用 gcloud dataproc clusters update 来扩缩集群,请运行以下命令。
gcloud dataproc clusters update cluster-name \
    --region=region \
    [--num-workers and/or --num-secondary-workers]=new-number-of-workers
其中,cluster-name 是要更新的集群的名称,new-number-of-workers 是更新后的主工作器节点数和/或辅助工作器节点数。 例如,要扩缩名为“dataproc-1”的集群并让该集群使用五个主要工作器节点,请运行以下命令。
gcloud dataproc clusters update dataproc-1 \
    --region=region \
    --num-workers=5
...
Waiting on operation [operations/projects/project-id/operations/...].
Waiting for cluster update operation...done.
Updated [https://dataproc.googleapis.com/...].
clusterName: my-test-cluster
...
  masterDiskConfiguration:
    bootDiskSizeGb: 500
  masterName: dataproc-1-m
  numWorkers: 5
  ...
  workers:
  - my-test-cluster-w-0
  - my-test-cluster-w-1
  - my-test-cluster-w-2
  - my-test-cluster-w-3
  - my-test-cluster-w-4
...

REST API

请参阅 clusters.patch

示例

PATCH /v1/projects/project-id/regions/us-central1/clusters/example-cluster?updateMask=config.worker_config.num_instances,config.secondary_worker_config.num_instances
{
  "config": {
    "workerConfig": {
      "numInstances": 4
    },
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  },
  "labels": null
}

控制台

创建集群后,您可以通过以下方式扩缩集群:在 Google Cloud 控制台集群页面中打开集群的集群详细信息页面,然后点击配置标签页上的修改按钮。
工作器节点和/或抢占式工作器节点的数量输入一个新值(在下面的屏幕截图中分别更新为“5”和“2”)。
点击保存以更新集群。

Dataproc 如何选择要移除的集群节点

在使用映像版本 1.5.83+2.0.57+2.1.5+ 创建的集群中,缩减集群时,Dataproc 会先移除未活跃、不健康和空闲的节点,然后移除运行 YARN 应用主副本和正在运行的容器数量最少的节点,以尽量减少移除节点对正在运行的 YARN 应用的影响。

安全停用

当您缩小集群时,正在进行的工作可能未完成便会停止。如果您使用的是 Dataproc 版本 1.2 或更高版本,则可以使用“安全停用功能”,其中整合了 YARN 节点的安全停用,可以先完成工作器上正在进行的工作,然后再从 Cloud Dataproc 集群中移除相应工作器。

安全停用和辅助工作器

即使集群扩缩操作已标记为完成,抢占式(辅助)工作器组仍会继续预配或删除工作器,以便达到预期的大小。如果尝试安全停用辅助工作器并收到类似于以下内容的错误消息:

“不能在 Dataproc 之外修改辅助工作组。如果您最近创建或更新了此集群,请在安全停用之前等待几分钟,以便所有辅助实例加入或离开集群。 预期的辅助工作器组大小:x,实际大小:y”

请等待几分钟,然后再次发出安全停用请求。

另请注意:

  • 您可以随时强制停用抢占式工作器。
  • 您可以随时安全停用主要工作器。

使用安全停用

Dataproc 安全停用功能整合了 YARN 节点的安全停用,可以先完成工作器上正在进行的工作,然后再从 Cloud Dataproc 集群中移除相应工作器。系统默认会停用安全停用功能。要启用该功能,您可以在更新集群以移除一个或多个工作器时设置超时值。

gcloud

在更新集群以移除一个或多个工作器时,请使用带有 --graceful-decommission-timeout 标志的 gcloud dataproc clusters update 命令。超时(字符串)值可以为“0s”(默认值;强制停用,并非安全停用)或相对于当前时间的正时长(例如“3s”)。 最长时长为 1 天。
gcloud dataproc clusters update cluster-name \
    --region=region \
    --graceful-decommission-timeout="timeout-value" \
    [--num-workers and/or --num-secondary-workers]=decreased-number-of-workers \
    ... other args ...

REST API

请参阅 clusters.patch.gracefulDecommissionTimeout。超时(字符串)值可以为“0”(默认值;强制停用,并非安全停用)或以秒为单位的时长(例如,“3s”)。最长时长为 1 天。

控制台

创建集群后,您可以通过以下方式选择安全停用集群:在 Google Cloud 控制台集群页面中打开集群的集群详细信息页面,然后点击配置标签页上的修改按钮。
安全停用部分中,选中“使用安全停用”复选框,然后选择超时值。
点击保存以更新集群。

如何取消安全停用缩减操作

在使用映像版本 2.0.57+2.1.5+ 创建的 Dataproc 集群上,您可以运行 gcloud dataproc operations cancel 命令或发出 Dataproc API operations.cancel 请求,以取消顺利停用缩减操作。

取消优雅停用缩减操作时,会出现以下情况:

  • 在操作取消完成后,处于 DECOMMISSIONING 状态的工作器会重新委托,并变为 ACTIVE

  • 如果缩减操作包含标签更新,这些更新可能不会生效。

如需验证取消请求的状态,您可以运行 gcloud dataproc operations describe 命令或发出 Dataproc API operations.get 请求。如果取消操作成功,内部操作状态会标记为 CANCELLED。