Managed Service for Apache Spark 的辅助工作器

除了使用标准 Compute Engine 虚拟机作为 Managed Service for Apache Spark 工作器(称为“主要”工作器)之外,Managed Service for Apache Spark 集群还可以使用 secondary 工作器。

以下特征适用于 Managed Service for Apache Spark 集群中的所有辅助工作器:

  • 仅处理 - 辅助工作器不存储数据,仅用来处理节点。因此,您可以使用辅助工作器来扩缩计算,而无需扩缩存储空间。

  • 仅限辅助工作器 - 您可以创建仅包含辅助工作器的零规模集群。不过,如果您创建标准集群且仅指定辅助工作器(未指定主要工作器的数量),则 Managed Service for Apache Spark 会向该集群添加两个主要工作器。

  • 机器类型 - 默认情况下,辅助工作器使用集群主要工作器的机器类型。例如,如果您创建的集群的主要工作器使用 n1-standard-4 机器类型,则默认情况下,添加到该集群的所有辅助工作器也将使用 n1-standard-4 机器类型。

    您可以不为辅助工作器使用默认的主要工作器机器类型,而是为其指定一个或多个排名机器类型列表。如需了解详情,请参阅 Managed Service for Apache Spark 灵活虚拟机

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

  • 异步创建 - 通过创建或扩容集群来添加辅助工作器时,辅助工作器可能无法在创建或更新操作完成时进行预配。这是因为 Managed Service for Apache Spark 使用托管式实例组 (MIG) 来管理辅助工作器,MIG 会在可以预配虚拟机时立即异步创建虚拟机(请参阅检查托管实例的状态)。

抢占式和非抢占式辅助工作器

辅助工作器有三种类型:Spot 虚拟机、标准抢占式虚拟机非抢占式虚拟机。默认的 Managed Service for Apache Spark 辅助工作器类型是标准抢占式虚拟机。您可以指定将 Spot 辅助工作器与非抢占式辅助工作器混合使用

示例:如果您在创建集群时选择三个辅助工作器,则可以指定三个 Spot 虚拟机、三个抢占式虚拟机、三个非抢占式虚拟机,或指定将 Spot 工作器与非抢占式工作器混合使用

抢占式工作器

  • 虽然移除抢占式工作器可能会影响作业稳定性,但您可以决定使用抢占式实例来降低非关键数据处理的每小时计算费用,或以较低的总费用创建超大型集群(您可以使用 Google Cloud 价格计算器来估算费用)。

  • 为获得最佳效果,集群中的抢占式工作器数量应小于集群中所有工作器(主要工作器和所有辅助工作器)总数的 50%。

  • 使用抢占式工作器时,与在非抢占式工作器上运行的作业相比,您的作业很可能会遇到更多的暂时性单工作器任务失败。如需提高作业对低层级任务失败的容忍度,您可以设置与用于自动扩缩集群的默认属性值类似的集群属性值,以增加任务重试次数上限并帮助避免作业失败。

  • 节省费用的注意事项:使用抢占式虚拟机并不总能节省费用,因为抢占可能会导致作业执行时间延长,从而增加作业费用。虽然将增强的灵活性模式 (EFM) 与抢占式虚拟机搭配使用有助于缓解这种情况,但抢占式虚拟机的总体费用节省效果将会因每个应用场景而异。通常,短期作业更适合使用抢占式虚拟机,因为在作业执行期间发生抢占的概率较低。请尝试不同的作业选项(例如,不使用抢占式虚拟机;将抢占式虚拟机与 EFM 搭配使用),以估算费用并找到最佳解决方案。

非抢占式工作器

选择辅助工作器

在使用Google Cloud 控制台gcloud CLIDataproc API 创建集群时,您可以指定辅助工作器的数量和类型。

  • 您可以将 Spot 辅助工作器与非抢占式辅助工作器混合使用
  • 您可以在创建集群后更新集群,以更改集群中辅助工作器的数量,但不能更改其类型。
  • 标签更新会在 24 小时内传播到所有抢占式辅助工作器。标签更新不会传播到现有非抢占式辅助工作器。标签更新会传播到标签更新添加到集群的所有工作器。例如,如果您纵向扩容集群,则所有新的主要工作器和辅助工作器都将具有新标签。

控制台

通过 Google Cloud 控制台创建 Managed Service for Apache Spark 集群时,您可以指定辅助工作器的数量。创建集群后,您可以通过Google Cloud 控制台修改集群配置来添加和移除辅助工作器。

创建包含辅助工作器的集群

  1. 打开创建集群页面。
  2. 点击其他配置以展开该部分。
  3. 修改辅助工作器
  4. 在打开的面板中,指定辅助工作器的数量、类型和其他设置。

更新包含辅助实例的集群

要更新集群中的辅助工作器数量,请在 Google Cloud 控制台的集群页面上点击相应的集群名称。在集群详情页面上,点击配置标签页,然后点击修改并更新“辅助工作器节点”字段中的数量。

从集群中移除所有辅助实例

如需从集群中移除所有辅助工作器,请按照前面的说明更新集群配置,并在“辅助工作器节点”字段中指定 0

gcloud CLI 命令

创建集群时,使用 gcloud dataproc clusters create 命令将辅助工作器添加到集群中。创建集群后,您可以使用 gcloud dataproc clusters update 命令在集群中添加或移除辅助工作器(可以更新辅助工作器的数量,但不能更新其类型)。

创建包含辅助工作器的集群

如需创建包含辅助工作器的集群,请使用带有 --num-secondary-workers 参数的 gcloud dataproc clusters create 命令。默认情况下,辅助工作器是标准抢占式虚拟机。通过将 --secondary-worker-type 标志设置为“非抢占式”或“Spot”,您可以在创建集群时指定非抢占式辅助工作器或 Spot 辅助工作器。以下示例展示了如何创建包含以下各个类型辅助工作器的集群:“抢占式”(默认类型)、Spot(抢占式)和非抢占式。您可以使用其他标志将 Spot 辅助工作器与非抢占式辅助工作器混合使用

示例 1

以下命令会创建包含两个标准抢占式(默认类型)辅助工作器的“cluster1”。

gcloud dataproc clusters create cluster1 \
    --num-secondary-workers=2 \
    --region=us-central1
示例 2

以下命令使用 secondary-worker-type 标志创建包含两个 Spot(抢占式)辅助工作器的“cluster2”。

gcloud dataproc clusters create cluster2 \
    --num-secondary-workers=2 \
    --secondary-worker-type=spot \
    --region=us-central1

示例 3

以下命令使用 secondary-worker-type 标志创建包含两个非抢占式辅助工作器的“cluster3”。

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

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

让 Google Cloud 控制台构建您的集群创建请求。创建集群页面底部,点击等效命令行等效 REST,让 Google Cloud 控制台构建等效的 gcloud CLI 命令或 API REST 请求。

更新包含辅助工作器的集群

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

示例

以下命令会将 example-cluster 更新为使用四个辅助工作器(属于默认类型或您创建集群时指定的类型)。

gcloud dataproc clusters update example-cluster \
    --num-secondary-workers=4 \
    --region=us-central1

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

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

示例

以下命令会从“example-cluster”中移除所有辅助工作器。

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

REST API

创建包含辅助工作器的集群

创建集群时,使用 Managed Service for Apache Spark clusters.create API 将辅助工作器添加至集群中。以下示例展示了如何创建包含以下各个类型辅助工作器的集群:preemptible(默认类型)、spot(抢占式)和 non-preemptible。您可以使用其他字段将 Spot 辅助工作器与非抢占式辅助工作器混合使用

示例 1

以下 POST 请求会创建包含两个标准抢占式(默认类型)虚拟机工作器的“cluster1”。


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

{
  "clusterName": "cluster1",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2
    }
  }
}

示例 2

以下 POST 请求会创建包含两个 Spot(抢占式)虚拟机工作器的“cluster2”。


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

{
  "clusterName": "cluster2",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2,
      "preemptibility": "SPOT"
    }
  }
}

示例 3

以下 POST 请求会创建包含两个非抢占式辅助工作器的“cluster3”。


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

{
  "clusterName": "cluster3",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 2,
      "preemptibility": "NON_PREEMPTIBLE"
    }
  }
}

更新包含辅助工作器的集群

使用 Managed Service for Apache Spark clusters.patch API 添加和移除辅助工作器。

示例

以下 PATCH 请求会将集群更新为具有四个辅助工作器(属于默认类型或您创建集群时指定的类型)。


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

让 Google Cloud 控制台构建您的集群创建请求。创建集群页面底部,点击等效命令行等效 REST,让 Google Cloud 控制台构建等效的 gcloud CLI 命令或 API REST 请求。

排查辅助工作器问题

  • 服务账号权限问题:辅助工作器通过托管式实例组进行创建。如果存在权限问题,Managed Service for Apache Spark 日志将不会报告辅助工作器创建失败,但失败的工作器会在Google Cloud 控制台中的集群详情页面的虚拟机实例标签页下列出,并且不会显示绿色对勾标记。如需查看列表,请打开 Managed Service for Apache Spark 集群页面,然后点击集群名称以打开该集群的集群详情页面。

  • 托管式实例组权限问题:如需检查托管式实例组权限是否有问题,请执行以下操作:

    1. 查找托管式实例组的名称 (instanceGroupManagerName)。

      Google Cloud 控制台

      1. 打开集群页面,然后点击集群名称以打开该集群的集群详情页面。
      2. 点击该页面底部的等效 REST,然后查看 config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName 值。

      gcloud CLI

      运行带有 --format 标志的 gcloud dataproc clusters describe 命令以显示 instanceGroupManagerName

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION \
          --format='value(config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName)'
      

      REST API

      提交 clusters.get 请求以返回 config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName 的值。

    2. Logs Explorer 中查看日志。
    • 选择 Google Compute Engine Instance Group 资源类型,然后筛选托管式实例组名称。

    • 您也可以为 resource.type="gce_instance_group" 和 resource.labels.instance_group_name=INSTANCE_GROUP_MANAGER_NAME 应用日志记录过滤条件。

将 Spot 辅助工作器与非抢占式辅助工作器混合使用

创建 Managed Service for Apache Spark 集群时,您可以指定“将 Spot 辅助工作器与非抢占式辅助工作器混合使用”。

将 Spot 辅助工作器与非抢占式辅助工作器混合使用的辅助工作器设置

在创建 Managed Service for Apache Spark 集群时,请使用以下辅助工作器设置,以获得最低级别的辅助工作器容量,并能够在 Spot 虚拟机可用时增加容量:

  • 辅助工作器数量:要预配的辅助工作器总数。

  • 辅助工作器类型spot 是将 Spot 辅助工作器与非抢占式辅助工作器混合使用时的辅助工作器类型。

  • standardCapacityBase:要预配的非抢占式(标准)辅助工作器的数量。非抢占式辅助工作器会在其他类型的辅助工作器之前预配。

  • standardCapacityPercentAboveBase:在填充辅助工作器的 standardCapacityBase 数量后,系统会将非抢占式虚拟机与 Spot 虚拟机混合使用,以填充为了满足所请求的辅助工作器总数而需要的剩余辅助工作器数量,如下所示:

    • standardCapacityPercentAboveBase:要用非抢占式虚拟机填充的剩余辅助工作器的百分比。
    • 系统会使用 Spot 虚拟机来填充为了满足所请求的辅助工作器总数而需要的剩余数量。

示例

  • 辅助工作器数量:15
  • standardCapacityBase: 5
  • standardCapacityPercentAboveBase 30%

结果:

  • 非抢占式:8 = 5 (standardCapacityBase) + 3(剩余 10 个的 30%)
  • Spot:7(剩余 10 个的 70%)
  • 总计 = 15

创建一个混合使用 Spot 辅助工作器与非抢占式辅助工作器的集群

在创建集群时,您可以使用 gcloud CLI 或 Dataproc API,将 Spot 辅助工作器与非抢占式辅助工作器混合使用。

gcloud

在本地或在 Cloud Shell 中运行以下命令,以创建一个混合使用 Spot 辅助工作器与非抢占式辅助工作器的集群。

gcloud dataproc clusters create CLUSTER_NAME \
    --project=PROJECT_ID \
    --region=REGION \
    --secondary-worker-type=spot \
    --num-secondary-workers=NUMBER_SECONDARY_WORKERS \
    --secondary-worker-standard-capacity-base=STANDARD_CAPACITY_BASE \
    --secondary-worker-standard-capacity-percent-above-base=STANDARD_CAPACITY_PERCENT_ABOVE_BASE \
    OTHER_FLAGS_AS_NEEDED

注意:

API

如需将 Spot 辅助工作器与非抢占式辅助工作器混合使用,请在 cluster.create 请求中设置 Managed Service for Apache Spark preemptibilitystandardCapacityBasestandardCapacityPercentAboveBase API 字段,如以下 JSON 示例所示:

{
  "clusterName": "CLUSTER_NAME",
  "config": {
    "secondaryWorkerConfig": {
      "numInstances": 15,
      **"preemptibility": "spot"**,
      "instanceFlexibilityPolicy": {
        "provisioningModelMix": {
          **"standardCapacityBase": STANDARD_CAPACITY_BASE**
          **"standardCapacityPercentAboveBase": STANDARD_CAPACITY_PERCENT_ABOVE_BASE**
        }
      }
    }
  }
}

注意:

将辅助工作器混用与灵活虚拟机相结合

在创建集群时,您可以将 Spot 辅助工作器与非抢占式辅助工作器混合使用,并为辅助工作器指定灵活虚拟机形状

gcloud CLI 示例:

gcloud dataproc clusters create cluster-name \
    --project=project-id \
    --region=us-central1 \
    --secondary-worker-type=spot \
    --num-secondary-workers=15 \
    --secondary-worker-standard-capacity-base=5 \
    --secondary-worker-standard-capacity-percent-above-base=30 \
    --secondary-worker-machine-types="type=n2-standard-8,rank=0" \
    --secondary-worker-machine-types="type=e2-standard-8,type=t2d-standard-8,rank=1"
    ...other flags as needed

与混合使用辅助工作器相关的特征

此部分介绍了与混合使用 Spot 辅助工作器和非抢占式辅助工作器相关的一些行为和特征。

辅助工作器偏好设置

在辅助工作器上调度应用时,Managed Service for Apache Spark 不会优先考虑 Spot 虚拟机或非抢占式虚拟机。

辅助工作器扩缩

如果通过自动伸缩或手动伸缩来伸缩辅助工作器,Managed Service for Apache Spark 会在添加辅助工作器时保持所要求的 Spot 与非抢占式的比例

更新辅助工作器混合使用设置

创建 Managed Service for Apache Spark 集群时,您可以指定“将 Spot 辅助工作器与非抢占式辅助工作器混合使用”。创建集群后,您无法更改辅助工作器混合使用设置。

Spot 辅助工作器抢占

  • Managed Service for Apache Spark 不会控制 Spot 虚拟机抢占的时机(请参阅 Spot 虚拟机抢占)。
  • 当发生 Spot 虚拟机被抢占时,辅助工作器组可暂时以较低的容量运行,直到 Compute Engine 重新配置被抢占的虚拟机。
  • Managed Service for Apache Spark 不会向辅助工作器组添加超出该组初始设置的容量。