本文档介绍了如何创建 Managed Service for Apache Spark 多可用区集群。在多可用区集群中,Managed Service for Apache Spark 会在单个区域中的多个可用区中预配和分布集群的 Compute Engine 虚拟机实例,而不是将所有集群节点放置在一个可用区中。
如果您需要创建或扩缩大型集群,而单个可用区的容量可能不足以满足您的请求,请使用多可用区集群。
多地区集群的工作原理
创建多可用区集群时,Managed Service for Apache Spark 会按如下方式预配集群节点:
- 主节点:Managed Service for Apache Spark 使用自动选择可用区展示位置将主实例组放置在集群区域中的单个可用区中。
- 工作器节点:Managed Service for Apache Spark 会将主要和次要工作器组配置为区域级托管式实例组 (MIG)。这些组会在该区域中具有可用容量的任何符合条件的可用区中预配和分布工作器虚拟机。
由于 Managed Service for Apache Spark 会将工作器虚拟机请求分布到多个可用区,因此单个可用区中的容量限制不太可能阻止您的请求。这有助于在您创建或扩缩大型集群、具有 Spot 虚拟机或可抢占辅助工作器的集群或使用高需求机器类型的集群时,防止出现 ZONE_RESOURCE_POOL_EXHAUSTED 错误。
要求和限制
如需创建多可用区集群,您必须使用以下映像版本之一或同一映像版本轨道中的更高版本:
| 映像版本轨道 | 支持的最低映像版本 |
|---|---|
| 2.2.x | 2.2.88 |
| 2.3.x | 2.3.37 |
| 3.0.x | 3.0.3 |
多可用区集群具有以下限制:
- 您不能在同一集群创建请求中同时指定单可用区和多可用区配置。
- 在初始集群创建请求中,您无法创建包含超过 1,000 个主工作节点的多可用区集群。如果您的工作负载需要 1,000 个以上的主工作节点,请先创建包含 1,000 个或更少主工作节点的集群,然后在集群创建后扩缩集群。
网络数据传输费用
在单可用区集群中,所有虚拟机都位于同一可用区,并且同一可用区中的虚拟机之间使用内部 IP 地址的网络流量是免费的。在多可用区集群中,主虚拟机和工作器虚拟机可以位于同一区域的不同可用区中。同一区域中不同可用区中的虚拟机之间的网络流量会产生可用区间数据传输费用。
如需了解价格详情,请参阅 Google Cloud中的虚拟机间数据传输价格。
创建多可用区集群
您可以使用 Google Cloud CLI 或 Dataproc API 创建多可用区集群。
gcloud
如需创建多可用区集群,请运行带有 --multizone 标志的 gcloud dataproc clusters create 命令。请勿指定 --zone 标志。
gcloud dataproc clusters create CLUSTER_NAME \
--region=REGION \
--multizone \
--image-version=IMAGE_VERSION \
--master-machine-type=MASTER_MACHINE_TYPE \
--worker-machine-type=WORKER_MACHINE_TYPE \
--num-workers=NUM_WORKERS
替换以下内容:
- CLUSTER_NAME:集群的名称。
- REGION:集群的可用 Compute Engine 区域,例如
us-central1。 - IMAGE_VERSION:支持多可用区集群的映像版本,例如
2.3.37-debian12。如需了解详情,请参阅要求和限制。 - MASTER_MACHINE_TYPE:主节点的 Compute Engine 机器类型,例如
n2-standard-4。 - WORKER_MACHINE_TYPE:主工作器节点的 Compute Engine 机器类型,例如
n2-standard-4。 - NUM_WORKERS:集群中的主工作节点数量。此值不能大于
1000。
REST
如需创建多可用区集群,请发送 clusters.create 请求。在请求的 gceClusterConfig 对象中,将 zoneUri 字段留空,并将 multiZoneConfig.targetShape 字段设置为 ANY。
HTTP 方法和网址:
POST https://dataproc.googleapis.com/v1/projects/PROJECT_ID/regions/REGION/clusters
请求 JSON 正文:
{
"projectId": "PROJECT_ID",
"clusterName": "CLUSTER_NAME",
"config": {
"gceClusterConfig": {
"multiZoneConfig": {
"targetShape": "ANY"
}
},
"softwareConfig": {
"imageVersion": "IMAGE_VERSION"
},
"masterConfig": {
"numInstances": 1,
"machineTypeUri": "MASTER_MACHINE_TYPE"
},
"workerConfig": {
"numInstances": NUM_WORKERS,
"machineTypeUri": "WORKER_MACHINE_TYPE"
}
}
}
替换以下内容:
- PROJECT_ID:您的 Google Cloud 项目 ID。
- REGION:集群的可用 Compute Engine 区域,例如
us-central1。 - CLUSTER_NAME:集群的名称。
- IMAGE_VERSION:支持多可用区集群的映像版本,例如
2.3.37-debian12。如需了解详情,请参阅要求和限制。 - MASTER_MACHINE_TYPE:主节点的 Compute Engine 机器类型,例如
n2-standard-4。 - NUM_WORKERS:集群中的主工作器数量。此值不能大于
1000。 - WORKER_MACHINE_TYPE:主工作器节点的 Compute Engine 机器类型,例如
n2-standard-4。