灵活虚拟机是 Managed Service for Apache Spark 的一项功能,可让您在创建 Managed Service for Apache Spark 集群时为 Managed Service for Apache Spark 主节点、主工作器节点和辅助工作器节点指定优先级的虚拟机类型列表。
为什么要使用灵活的虚拟机?
以前,如果您在提交集群创建请求时,某个虚拟机类型不可用,则请求会失败,您需要更新请求、脚本或代码,以指定“次优”虚拟机类型。此重新请求过程可能涉及多次迭代,直到您指定可用的虚拟机类型为止。
Managed Service for Apache Spark 灵活虚拟机功能可帮助您成功发出集群创建请求,方法是从排名的虚拟机列表中选择主工作器、主工作器和辅助工作器虚拟机类型,然后在指定集群区域内搜索列出的虚拟机类型可用的可用区。
限制
使用灵活虚拟机的集群无法停止。
术语
- 虚拟机类型:虚拟机实例的系列、内存容量和 CPU 核心数。 Managed Service for Apache Spark 支持使用预定义和自定义虚拟机类型。
- 主节点和主工作器节点:集群有一个主节点和至少两个主工作器。
- 辅助工作器:辅助工作器是可选的,不存储数据,仅充当处理节点。您可以使用辅助工作器来伸缩计算,而无需伸缩存储空间。默认的灵活虚拟机辅助工作器类型是 Spot 虚拟机,这是一种抢占式类型(请参阅 Managed Service for Apache Spark 辅助工作器)。
用法
- 灵活的虚拟机适用于 Managed Service for Apache Spark on Compute Engine
2.0.74+、2.1.76+、2.2.42+及更高的映像版本。 - 创建包含主工作器或主要工作器 Flex 虚拟机的集群需要更长时间(大约需要额外 32 秒)。
- 集群名称不得超过 45 个字符。
- 所有虚拟机类型都需要使用相同的磁盘类型。
- 您最多可以指定 5 个排名的虚拟机类型列表,每个列表最多包含 10 个虚拟机类型。如需了解详情,请参阅如何请求灵活的虚拟机。
- 创建使用灵活虚拟机的集群需要使用 Managed Service for Apache Spark 自动选择可用区展示位置,以便 Managed Service for Apache Spark 选择有能力满足您的虚拟机类型请求的可用区。
- 如果您的集群创建请求包含自动扩缩政策,则灵活的虚拟机可以来自不同的虚拟机系列,但必须具有相同的内存量和核心数。
- 预配灵活的虚拟机时,Managed Service for Apache Spark 会使用“任何匹配的”可用预留,但不会使用“特定”预留(请参阅使用预留实例)。系统会先在同等级别中选择与匹配的机器类型,然后选择 CPU 数量最多的虚拟机类型。
- Managed Service for Apache Spark 会对灵活的虚拟机预配应用 Google Cloud 配额。
- 虽然您可以为集群中的主要和辅助工作器 V 类型指定不同的 CPU 与内存比率,但这可能会导致性能下降,因为系统会将最小的 CPU 与内存比率用作最小的容器单元。
- 如果您更新使用灵活虚拟机创建的集群,Managed Service for Apache Spark 会从您在创建集群时提供的灵活虚拟机列表中选择并添加工作器。
如何请求灵活的虚拟机
在使用 Google Cloud 控制台、Google Cloud CLI 或 Managed Service for Apache Spark API 创建 Managed Service for Apache Spark 集群时,您可以指定灵活的虚拟机。
- 您最多可以指定 5 个排名的虚拟机类型列表,每个列表最多包含 10 个虚拟机类型。排名最低的列表具有最高优先级。默认情况下,灵活虚拟机列表的排名为 0。在列表中,Managed Service for Apache Spark 会优先选择具有未使用预留的虚拟机类型,其次是最大的虚拟机规模。列表中 CPU 数量相同的虚拟机类型会被同等对待。
控制台
如需创建具有辅助工作器灵活虚拟机的集群,请执行以下操作:
- 在 Google Cloud 控制台中打开 Managed Service for Apache Spark 的在 Compute Engine 上创建集群页面。
- 选中设置集群面板,其中的字段填充了默认值。您可以更改建议的名称和集群区域,并进行其他更改。确保已选择任意作为集群可用区,以便 Managed Service for Apache Spark 自动选择可用区功能选择灵活虚拟机列表中指定的虚拟机类型具有最佳可用性的可用区。
- 选择配置节点面板。在辅助工作器节点部分中,指定辅助工作器的数量和可抢占性。
- 针对每个辅助工作器等级,点击添加辅助工作器,并指定要纳入每个等级的一个或多个机器类型。
- 在集群创建面板中确认并指定集群详细信息后,点击创建。
gcloud
使用 gcloud dataproc clusters create 命令添加多个 master-machine-types、worker-machine-types 和 secondary-worker-machine-types 标志,以便为主工作器、主工作器和辅助工作器指定排名的灵活虚拟机列表。
以下示例请求了主虚拟机、主虚拟机和辅助虚拟机类型,并具有以下优先级:
- 如果
e2-standard-8虚拟机可用,则预配e2-standard-8虚拟机(等级为 0);如果e2-standard-8机器不可用,则预配n2-standard-8虚拟机(等级为 1)。
由于未指定辅助工作器类型,系统将预配抢占式 Spot 辅助虚拟机。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --zone="" \ --master-machine-types="type=e2-standard-8,rank=0" \ --master-machine-types="type=n2-standard-8,rank=1" \ --num-workers=10 \ --worker-machine-types="type=e2-standard-8,rank=0" \ --worker-machine-types="type=n2-standard-8,rank=1" \ --num-secondary-workers=4 \ --secondary-worker-machine-types="type=e2-standard-8,rank=0" \ --secondary-worker-machine-types="type=n2-standard-8,rank=1"
注意:
--zone="":灵活的虚拟机功能需要使用 Managed Service for Apache Spark 自动选择可用区,以便 Managed Service for Apache Spark 选择具有可供使用的虚拟机类型的可用区。向--zone标志传递空值 ("") 会替换默认gcloud config list中指定的任何可用区选择。
API
在 Managed Service for Apache Spark API clusters.create 请求中使用 instanceFlexibilityPolicy.instanceSelectionList 为主工作器、主要工作器和辅助工作器指定排名的 machineTypes 列表。
示例:以下来自 clusters.create
请求正文的 JSON 代码段为等级 0 和等级 1 指定了主节点 (masterConfig)、主工作器 (workerConfig) 和辅助工作器 (secondaryWorkerConfig) 机器类型。
{
"projectId": "PROJECT_ID",
"clusterName": "CLUSTER_NAME",
"config": {
"gceClusterConfig": {
"zoneUri": ""
},
"masterConfig": {
"numInstances": 1,
"instanceFlexibilityPolicy": {
"instanceSelectionList": [
{
"machineTypes": ["e2-standard-8"],
"rank": 0
},
{
"machineTypes": ["n2-standard-8"],
"rank": 1
}
]
}
},
"workerConfig": {
"numInstances": 10,
"instanceFlexibilityPolicy": {
"instanceSelectionList": [
{
"machineTypes": ["e2-standard-8"],
"rank": 0
},
{
"machineTypes": ["n2-standard-8"],
"rank": 1
}
]
}
},
"secondaryWorkerConfig": {
"numInstances": 4,
"instanceFlexibilityPolicy": {
"instanceSelectionList": [
{
"machineTypes": ["e2-standard-8"],
"rank": 0
},
{
"machineTypes": ["n2-standard-8"],
"rank": 1
}
]
}
}
}
}
替换 Flex 虚拟机属性
Managed Service for Apache Spark 在集群级设置属性。创建使用灵活虚拟机的集群时,您可以替换系统为主工作器和辅助工作器灵活虚拟机类型生成的属性。
gcloud
如需在创建集群时替换属性,请使用 --properties 标志,并采用以下语法:
--properties="$ROLE:$MACHINE_TYPE:$COMPONENT_PREFIX:$COMPONENT_PROPERTY=$VALUE"
- ROLE 可以是
primary_worker或secondary_worker。 - 使用英文逗号分隔多个属性。
运行以下 gcloud dataproc clusters create 命令,以替换 YARN 为辅助工作器上的 NodeManager 分配的 vCPU 数量。此示例将所有 e2-standard-8 和 n2-standard-8 次要工作器虚拟机的 yarn-site.xml 中的 yarn.nodemanager.resource.cpu-vcores 值设置为 6。
gcloud dataproc clusters create CLUSTER_NAME \
--num-workers=10 \
--num-secondary-workers=4 \
--worker-machine-types="type=e2-standard-8,rank=0" \
--worker-machine-types="type=n2-standard-8,rank=1" \
--master-machine-types="type=e2-standard-8,rank=0" \
--master-machine-types="type=n2-standard-8,rank=1" \
--secondary-worker-machine-types="type=e2-standard-8,rank=0" \
--secondary-worker-machine-types="type=n2-standard-8,rank=1" \
--region=us-central1 \
--zone="" \
--properties="secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6,secondary_worker:n2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6"
API
如需替换属性,请在集群创建请求中 SoftwareConfig 对象的 properties 字段中定义这些属性。
属性键的语法如下:
ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY
- ROLE 可以是
primary_worker或secondary_worker。
以下 SoftwareConfig 对象会替换 YARN 为辅助工作器上的 NodeManager 分配的 vCPU 数量。此示例将所有 e2-standard-8 和 n2-standard-8 辅助工作器虚拟机的 yarn.nodemanager.resource.cpu-vcores 值设置为 6。
{
"imageVersion":"2.2.42",
"properties": {
"secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores" : "6",
"secondary_worker:n2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores" : "6"
}
}