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 类型指定不同的 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"