Dataproc 灵活虚拟机

灵活虚拟机是 Dataproc 的一项功能,可让您在创建 Dataproc 集群时为 Dataproc 辅助工作器指定虚拟机类型的优先级列表。

为什么要使用灵活的虚拟机?

以前,如果您在提交集群创建请求时虚拟机类型不可用,该请求会失败,并且您需要更新请求、脚本或代码,以指定“次优”虚拟机类型。此重新请求过程可能涉及多次迭代,直到您指定可用的虚拟机类型。

Dataproc 灵活虚拟机功能会从排名虚拟机列表中选择次要工作器虚拟机类型,然后搜索指定集群区域内可用列出的虚拟机类型的区域,从而帮助您的集群创建请求成功。

术语

  • 虚拟机类型:虚拟机实例的系列、内存容量和 CPU 核心数。Dataproc 支持使用预定义和自定义虚拟机类型

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

限制和注意事项

  • 灵活虚拟机适用于 Dataproc on Compute Engine 2.0.74+2.1.22+ 及更高版本的 Dataproc on Compute Engine 映像版本

  • 您只能为辅助工作器指定灵活虚拟机。

  • 您最多可以指定 5 个排名虚拟机类型列表,每个列表中最多包含 10 种虚拟机类型。如需了解详情,请参阅如何请求灵活虚拟机

  • 若要创建包含灵活虚拟机的集群,您需要使用 Dataproc 自动选择可用区功能,以便 Dataproc 选择有能力满足您的虚拟机类型请求的可用区。

  • 如果您的集群创建请求包含自动扩缩政策,则灵活虚拟机可以来自不同的虚拟机系列,但它们的内存大小和核心数量必须相同。

  • 预配灵活虚拟机时,Dataproc 会使用“任何匹配”的可用预留,但不会使用“特定”预留(请参阅使用预留实例)。系统会先在同一等级中选择与预留值匹配的机器类型,然后再选择 CPU 数量最多的虚拟机类型。

  • Dataproc 会对灵活的虚拟机预配应用 Google Cloud 配额

  • 虽然您可以为集群中的主工作器 V 类型和辅助工作器 V 类型指定不同的 CPU 与内存比率,但这可能会导致性能下降,因为系统会使用最小的 CPU 与内存比率作为最小的容器单元。

  • 如果您更新使用弹性虚拟机创建的集群,Dataproc 会从您在创建集群时提供的弹性虚拟机列表中选择并添加工作器。

如何申请灵活虚拟机

在使用 Google Cloud 控制台、Google Cloud CLI 或 Dataproc API 创建 Dataproc 集群时,您可以指定灵活虚拟机。

  • 您最多可以指定 5 个排名虚拟机类型列表,每个列表中最多包含 10 种虚拟机类型。排名最低的列表具有最高优先级。默认情况下,灵活的虚拟机列表的排名为 0。在列表中,Dataproc 会优先分配有未使用的预留的虚拟机类型,其次是虚拟机大小最大的虚拟机类型。列表中具有相同 CPU 数量的虚拟机类型会被平等对待。

控制台

如需创建包含辅助工作器灵活虚拟机的集群,请执行以下操作:

  1. 打开 Google Cloud 控制台中的 Dataproc 在 Compute Engine 上创建集群页面。

  2. 选择设置集群面板,其中的字段填充默认值。您可以更改建议的名称和集群区域,以及进行其他更改。请务必选择任意作为集群可用区,以允许 Dataproc 自动选择可用区功能选择可用区中灵活虚拟机列表中指定的虚拟机类型的最高可用性。

  3. 选择配置节点面板。在辅助工作器节点部分中,指定辅助工作器的数量和抢占性。

    • 针对每个辅助工作器等级,点击添加辅助工作器,指定要包含在每个等级中的一种或多种机器类型。
  4. 在集群创建面板中确认并指定集群详细信息后,点击创建

gcloud

使用 gcloud dataproc clusters create 命令添加多个 secondary-worker-machine-types 标志,以指定 Dataproc 辅助工作器的排名灵活虚拟机列表。默认的灵活虚拟机辅助工作器类型为 Spot,这是一种抢占式类型。

在以下 gcloud CLI 示例中,Dataproc 会先尝试使用 n2-standard-8 个虚拟机预配辅助工作器(排名为 0)。如果没有可用的 n2-standard-8 机器,Dataproc 会尝试使用 e2-standard-8t2d-standard-8 虚拟机(排名 1)预配次要工作器。

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --zone="" \
    --master-machine-type=n1-standard-8 \
    --worker-machine-type=n1-standard-8 \
    --num-workers=4 \
    --num-secondary-workers=4 \
    --secondary-worker-type=non-preemptible \
    --secondary-worker-machine-types="type=n2-standard-8,rank=0" \
    --secondary-worker-machine-types="type=e2-standard-8,type=t2d-standard-8,rank=1"

注意:

  • --zone="":若要使用“灵活虚拟机”功能,您需要启用 Dataproc 自动选择可用区展示位置,以便 Dataproc 选择可供您使用的虚拟机类型的区域。将空值(“”)传递给 --zone 标志会覆盖默认 gcloud config list 中指定的任何可用区选择。

  • Dataproc 会根据机器核心和内存生成组件 role 属性。您可以使用以下语法通过 --properties 标志替换这些系统生成的属性:

    --properties="ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY=VALUE"
    

    仅支持 secondary_worker 角色。

    在以下示例中,--properties 标志会将分配给辅助工作器节点的 e2-standard-8 机器的核心数从 8 更改为 6

    --properties="secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6"
    

API

在 Dataproc API clusters.create 请求中使用 instanceFlexibilityPolicy.instanceSelectionList 指定辅助工作器的machineTypes 排名列表。

示例:

以下来自 Dataproc clusters.create 请求正文的 JSON 代码段为第 0 级和第 1 级指定了辅助工作器机器类型。

"config": {
  "secondaryWorkerConfig": {
    "instanceFlexibilityPolicy": {
      "instanceSelectionList": [
        {
          "machineTypes": [
            "n1-standard-4",
            "n2-standard-4"
          ],
          "rank": 0
        },
        {
          "machineTypes": [
            "e2-standard-4",
            "n2d-standard-4"
          ],
          "rank": 1
        }
      ]
    }
  }
}

使用集群属性自定义组件角色:Dataproc 会根据虚拟机核心和内存生成组件 role 属性。您可以使用以下 key=value 语法将 SoftwareConfig.properties 添加到 clusters.create 请求,以替换这些系统生成的属性:

ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY=VALUE

仅支持 secondary_worker 角色。

在以下示例中,properties 字段将分配给 e2-standard-8 虚拟机的辅助工作器节点的核心数量从 8 更改为 6

"secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6"