抢占式虚拟机

除了使用标准 Compute Engine 虚拟机 (VM) 之外,Dataproc 集群还可以使用抢占式虚拟机实例(也称为“抢占式虚拟机”)。如果 Google Cloud 要求将抢占式工作器从其他集群中移除以用于其他任务,则系统会回收这些工作器。虽然移除抢占式工作器可能会影响作业稳定性,但您可以决定使用抢占式实例来降低非关键数据处理的每小时计算费用,或以较低的总费用创建大型集群。如需了解详情,请参阅 Dataproc 价格文档

抢占式实例如何与 Dataproc 配合使用

添加到集群的所有辅助工作器都是使用集群主要工作器节点的机器类型。例如,如果您创建的集群具有使用 n1-standard-4 机器类型的主要工作器,则添加到该集群的所有辅助工作器也将使用 n1-standard-4 机器。

如果 Google Cloud 需要抢占式工作器执行其他任务,则系统会回收这些工作器。如果容量允许,则系统会将它们添加回集群。 例如,如果系统从集群回收并移除了两个抢占式机器,这些实例会在有可用容量时重新添加至集群中。

以下规则适用于 Dataproc 集群中的所有辅助工作器(抢占式和非抢占式工作器):

  • 仅处理 - 辅助工作器不存储数据,仅用来处理节点。

  • 无仅限辅助工作器集群 — 您的集群必须具有主要工作器。如果您创建集群,但未指定主要工作器的数量,则 Dataproc 会向该集群添加两个主要工作器。

  • 永久性磁盘大小 - 默认情况下,使用 100GB 或主要工作器启动磁盘大小中较小的值来创建辅助工作器。此磁盘空间用于数据的本地缓存,但无法通过 HDFS 访问。 您可以在创建集群时使用 gcloud dataproc clusters create --secondary-worker-boot-disk-size 命令替换默认磁盘大小。即使集群在创建时没有辅助工作器,您也可以指定此标志。

在集群中使用抢占式实例

在通过 Dataproc API 请求使用 Cloud SDK gcloud 命令行工具或从 Google Cloud Console 创建集群时,您可以指定辅助工作器的数量和类型(抢占式和/或非抢占式)。

注意:

  • 集群可以包含抢占式辅助工作器或非抢占式辅助工作器,但不能同时包含这两者。
  • 您可以在创建集群后更新集群,以更改集群中辅助工作器的数量,但不能更改其类型。
  • 标签更新会在 24 小时内传播到所有抢占式辅助工作器。目前,标签更新不会传播到现有非抢占式辅助工作器。标签更新还会传播到标签更新后添加到集群的工作器。例如,如果您纵向扩容集群,则所有新的主要工作器和辅助工作器都将具有新标签。

gcloud 命令

创建集群时,使用 gcloud dataproc clusters create 命令将抢占式实例添加至集群中。创建集群后,您可以使用 gcloud dataproc clusters update 命令在集群中添加或移除抢占式工作器。

创建包含抢占式工作器的集群

如需创建具有抢占式工作器的集群,请使用带有 --num-secondary-workers 参数的 gcloud dataproc clusters create 命令。请注意,辅助工作器默认为抢占式工作器,但您可以在创建集群时通过设置 --secondary-worker-type=non-preemptible 来添加非抢占式辅助工作器(请参阅示例 2)。

示例 1

以下命令创建了一个名为“my-test-cluster”的集群,其中包含两个抢占式工作器。

gcloud dataproc clusters create my-test-cluster \
    --num-secondary-workers=2 \
    --region=us-central1
...
Waiting on operation [operations/projects/project-id/operations/...].
clusterName: my-test-cluster
  ...
secondaryWorkerConfiguration:
    - dataproc-1-sw-2skd
    - dataproc-1-sw-l20p
    isPreemptible: true
...

示例 2

以下命令使用 secondary-worker-type 标志创建“my-test-cluster”集群,其中包含两个非抢占式辅助工作器。

gcloud dataproc clusters create my-test-cluster \
    --num-secondary-workers=2 \
    --secondary-worker-type=non-preemptible \
    --region=us-central1

更新集群以添加或移除辅助工作器

如需更新集群以添加或移除辅助工作器,请使用带有 --num-secondary-workers 参数的 gcloud dataproc clusters update 命令。

示例

以下命令会将名为“my-test-cluster”的集群更新为使用两个辅助工作器。

gcloud dataproc clusters update my-test-cluster \
    --num-secondary-workers=2 \
    --region=us-central1
...
Waiting on operation [operations/projects/project-id/operations/...].
Waiting for cluster update operation...done.
Updated [https://dataproc.googleapis.com/...].
clusterName: my-test-cluster
  ...
secondaryWorkerConfiguration:
    - dataproc-1-sw-2skd
    - dataproc-1-sw-l20p
    isPreemptible: true
...

从集群中移除所有辅助工作器

如需从集群中移除所有辅助工作器,请使用带有 --num-secondary-workers(设为 0)的 gcloud dataproc clusters update 命令。

示例

以下命令会从集群中移除所有辅助工作器。

gcloud dataproc clusters update my-test-cluster \
    --num-secondary-workers=0 \
    --region=us-central1

REST API

创建包含抢占式工作器的集群

创建集群时,使用 Dataproc clusters.create API 将抢占式工作器添加至集群中。请注意,辅助工作器默认为抢占式工作器,但您可以向集群添加非抢占式辅助工作器,如示例 2 所示。

示例 1

以下 POST 请求会创建一个包含两个抢占式工作器的集群。


POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters

{
  "clusterName": "cluster-name",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  }
}

示例 2

以下 POST 请求将创建一个集群,其中包含两个非抢占式辅助工作器。


POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters

{
  "clusterName": "cluster-name",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2,
      "preemptibility": "NON_PREEMPTIBLE"
    }
  }
}

更新集群以添加或移除抢占式实例

使用 Dataproc clusters.patch API 添加和移除辅助工作器。

示例

以下 PATCH 请求会将集群更新为具有 2 个辅助工作器。


PATCH /v1/projects/project-id/regions/region/clusters/cluster-name?updateMask=config.secondary_worker_config.num_instances
{
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  }
}

控制台

在 Cloud Console 中创建 Dataproc 集群时,您可以指定抢占工作器的数量。创建集群后,您可以通过从 Cloud Console 修改集群配置来添加和移除抢占式工作器。

创建具有抢占式实例的集群

在 Cloud Console 中的 Dataproc 创建集群页面上,打开标题为“抢占式工作器、存储分区、网络、版本、初始化和访问选项”的可展开面板。

节点数字段中指定一个正数,将抢占式工作器添加至新集群中。

更新集群以添加或移除抢占式实例

创建集群后,您可以点击集群详细信息页面上配置标签页中的修改按钮,以修改集群中的抢占式工作器数量。

如需更改抢占式工作器的数量,请在抢占式工作器节点字段中指定新值。

从集群中移除所有抢占式实例

如需从集群中移除所有抢占式实例,请按照上述说明更新集群配置,并在抢占式工作器节点数字段中指定 0