灵活虚拟机是一项 Dataproc 功能,可让您在创建 Dataproc 集群时为 Dataproc 辅助工作器指定虚拟机类型的优先级列表。
为何使用灵活虚拟机?
以前,如果在您提交集群创建请求时某个虚拟机类型不可用,则请求会失败,您需要更新请求、脚本或代码以指定“次优”虚拟机类型。此重新请求过程可能涉及多次迭代,直到您指定可用的虚拟机类型。
Dataproc 灵活虚拟机功能可帮助您从按顺序排名的虚拟机列表中选择辅助工作器虚拟机类型,然后搜索指定集群区域内具有所列虚拟机类型可用性的可用区,从而帮助您成功集群创建请求。
术语
虚拟机类型:虚拟机实例的系列、内存容量和 CPU 核心数。Dataproc 支持使用预定义和自定义虚拟机类型。
辅助工作器:辅助工作器不存储数据。它们仅充当处理节点。您可以使用辅助工作器伸缩计算资源,而无需伸缩存储空间。
限制和注意事项
灵活虚拟机适用于 Compute Engine 上的 Dataproc
2.0.74+
、2.1.22+
及更高版本和 Compute Engine 上的 Dataproc 映像版本。在预览版期间:
- 您只能为辅助工作器指定灵活虚拟机。
- 您可以在集群创建请求中将 Spot 或非抢占式辅助工作器类型指定为灵活虚拟机,但不能同时指定这两者。如果您未指定辅助工作器类型,Dataproc 将使用抢占式的 Spot 虚拟机。
您最多可以指定五个按顺序排列的虚拟机类型列表,列表中最多可指定 10 个虚拟机类型。如需了解详情,请参阅如何请求灵活虚拟机。
如需创建具有灵活虚拟机的集群,需要使用 Dataproc 自动可用区布置,这使 Dataproc 能够选择具有满足虚拟机类型请求的容量的可用区。
如果您的集群创建请求包含自动扩缩政策,则灵活虚拟机可以来自不同的虚拟机系列,但它们的内存和核心数必须相同。
预配灵活虚拟机时,Dataproc 会使用“任何匹配的”可用预留,而不是“特定”预留(请参阅使用预留实例)。系统会首先按某个排序选择与预留匹配的机器类型,然后选出 CPU 数量最多的虚拟机类型。
Dataproc 将 Google Cloud 配额应用于灵活的虚拟机预配。
虽然您可以为集群中的主要和辅助工作器 V 类型指定不同的 CPU 与内存比率,但这可能会导致性能下降,因为最小的 CPU 与内存比率被用作最小的容器单元。
如果您要更新使用灵活虚拟机创建的集群,Dataproc 会从您在创建集群时提供的灵活虚拟机列表中选择并添加工作器。
如何请求灵活虚拟机
使用 Google Cloud 控制台、Google Cloud CLI 或 Dataproc API 创建 Dataproc 集群时,您可以指定灵活的虚拟机。
- 您最多可以指定五个按顺序排列的虚拟机类型列表,列表中最多可指定 10 个虚拟机类型。排名最低的列表具有最高的优先级。默认情况下,灵活虚拟机列表的排名为 0。在一个列表中,Dataproc 会优先考虑具有未使用预留的虚拟机类型,其次是最大虚拟机大小。列表中具有相同 CPU 数量的虚拟机类型将受到同等对待。
控制台
如需创建具有辅助工作器柔性虚拟机的集群,请执行以下操作:
在 Google Cloud 控制台中打开 Dataproc 在 Compute Engine 上创建集群页面。
选择设置集群面板,其中的字段已填充默认值。您可以更改建议的名称和集群区域,也可以进行其他更改。确保选择了任意作为集群可用区,以允许 Dataproc 自动可用区布置选择在灵活虚拟机列表中指定的虚拟机类型可用性最高的可用区。
选择配置节点面板。在辅助工作器节点部分中,指定辅助工作器的数量和可抢占性。
- 针对辅助工作器的每个排名点击添加辅助工作器,指定要在每个排名中包含一种或多种机器类型。
在集群创建面板中确认并指定集群详细信息后,点击创建。
gcloud
使用 gcloud dataproc clusters create
命令添加多个 secondary-worker-machine-types
标志,以便为 Dataproc 辅助工作器指定按顺序排名的灵活虚拟机列表。默认的灵活虚拟机辅助工作器类型为 Spot,它是一种抢占式类型。
在以下 gcloud CLI 示例中,Dataproc 首先尝试为辅助工作器预配 n2-standard-8
虚拟机(排名为 0)。如果 n2-standard-8 机器不可用,Dataproc 会尝试使用 e2-standard-8
或 t2d-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
使用 instanceFlexibilityPolicy.instanceSelectionList
作为 Dataproc API clusters.create
请求的一部分,为辅助工作器指定经过排序的 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"