除了使用标准 Compute Engine 虚拟机作为 Dataproc 工作器(称为“主要”工作器)之外,Dataproc 集群还可以使用 secondary
工作器。
以下特征适用于 Dataproc 集群中的所有辅助工作器:
仅处理 - 辅助工作器不存储数据,仅用来处理节点。因此,您可以使用辅助工作器来扩缩计算,而无需扩缩存储空间。
无仅限辅助工作器集群 — 您的集群必须具有主要工作器。如果您创建集群,但未指定主要工作器的数量,则 Dataproc 会向该集群添加两个主要工作器。
机器类型 - 默认情况下,辅助工作器使用集群的主要工作器的机器类型。例如,如果您创建的集群具有使用
n1-standard-4
机器类型的主要工作器,则默认情况下,添加到该集群的所有辅助工作器也将使用n1-standard-4
机器。您可以为辅助工作器指定一个或多个按等级排序的机器类型列表,而不是为辅助工作器使用默认的主要工作器机器类型。如需了解详情,请参阅 Dataproc 灵活虚拟机。
永久性磁盘大小 - 默认情况下,使用 100GB 或主要工作器启动磁盘大小中较小的值来创建辅助工作器。此磁盘空间用于数据的本地缓存,但无法通过 HDFS 访问。 您可以在创建集群时使用
gcloud dataproc clusters create --secondary-worker-boot-disk-size
命令替换默认磁盘大小。即使集群在创建时没有辅助工作器,您也可以指定此标志。异步创建 - 通过创建或扩容集群来添加辅助工作器时,辅助工作器可能无法在创建或更新操作完成时进行预配。这是因为 Dataproc 使用代管式实例组 (MIG) 管理辅助工作器,MIG 会在预配虚拟机后立即异步创建虚拟机(请参阅检查托管实例的状态)。
抢占式和非抢占式辅助工作器
辅助工作器有三种类型:Spot 虚拟机、标准抢占式虚拟机和非抢占式虚拟机。默认的 Dataproc 辅助工作器类型是标准抢占式虚拟机。您可以指定混合使用 Spot 实例和非抢占式辅助工作器。
示例:如果您在创建集群时选择三个辅助工作器,则可以指定三个 Spot 虚拟机、三个抢占式虚拟机、三个非抢占式虚拟机,或混合使用 Spot 工作器和非抢占式工作器。
抢占式工作器
虽然移除抢占式工作器可能会影响作业稳定性,但您可以决定使用抢占式实例来降低非关键数据处理的每小时计算费用,或以较低的总费用创建大型集群(您可以使用 Google Cloud 价格计算器来估算费用)。
为获得最佳结果,集群中的抢占式工作器数量应小于集群中所有工作器(主要工作器和所有辅助工作器)总数的 50%。
使用抢占式工作器时,与在非抢占式工作器上运行的作业相比,您的作业可能会遇到更多的暂时性单工作器任务失败。如需提高作业对低层级任务失败的容忍度,您可以设置与用于自动扩缩集群的默认属性值类似的集群属性值,以增加任务重试次数上限并帮助避免作业失败。
节省费用注意事项:使用抢占式虚拟机并不总能节省费用,因为抢占可能会导致作业执行时间延长,从而导致作业费用增加。虽然将增强的灵活性模式 (EFM) 与抢占式虚拟机搭配使用有助于缓解这种情况,但抢占式虚拟机的总体费用节省幅度会因使用情形而异。一般来说,短时作业更适合使用抢占式虚拟机,因为作业执行期间发生抢占的概率会较低。尝试不同的作业选项(例如不使用抢占式虚拟机和使用 EFM 的抢占式虚拟机),以估算费用并找到最佳解决方案。
非抢占式工作器
- 您可以创建包含非抢占式辅助工作器的集群,从而在不满足作业稳定性的前提下扩缩计算。为此,请将
non-preemptible
指定为辅助工作器类型。您可以将非抢占式辅助工作器与 Spot 辅助工作器搭配使用。
选择辅助工作器
您可以使用 Google Cloud 控制台、gcloud CLI 或 Dataproc API 创建集群,并指定辅助工作器的数量和类型。
- 您可以将 Spot 实例与非抢占式辅助工作器搭配使用。
- 您可以在创建集群后更新集群,以更改集群中辅助工作器的数量,但不能更改其类型。
- 标签更新会在 24 小时内传播到所有抢占式辅助工作器。标签更新不会传播到现有非抢占式辅助工作器。标签更新会传播到标签更新后添加到集群的所有工作器。例如,如果您纵向扩容集群,则所有新的主要工作器和辅助工作器都将具有新标签。
控制台
通过 Google Cloud 控制台创建 Dataproc 集群时,您可以指定辅助工作器的数量。创建集群后,您可以通过 Google Cloud 控制台修改集群配置来添加和移除辅助工作器。
创建包含辅助工作器的集群
在 Google Cloud 控制台的 Dataproc 创建集群页面上,您可以从“配置节点”面板的“辅助工作器节点数”部分,设置要应用于新集群的辅助工作器的数量和类型。在辅助工作器节点数和抢占式字段中分别指定辅助工作器的数量和类型。
更新集群中的辅助实例
如需更新集群中的辅助工作器数量,请点击 Google Cloud 控制台的集群页面上的集群名称。在集群详情页面上,执行以下操作。点击“配置”标签页,然后点击修改并更新“辅助工作器节点数”字段中的数目。
从集群中移除所有辅助实例
如需从集群中移除所有辅助实例,请按照前面所述更新集群配置,并在辅助工作器节点数字段中指定 0
。
Google Cloud CLI 命令
创建集群时,使用 gcloud dataproc clusters create
命令将辅助工作器添加到集群中。创建集群后,您可以使用 gcloud dataproc clusters update
命令在集群中添加或移除辅助工作器(可以更新辅助工作器的数量,但不能更新其类型)。
创建包含辅助工作器的集群
如需创建一个包含辅助工作器的集群,请使用带有 --num-secondary-workers
参数的 gcloud dataproc clusters create
命令。辅助工作器默认为标准抢占式虚拟机。您可以在创建集群时通过将 --secondary-worker-type
标志设置为 `non-preemptible` 或 `spot` 来指定非抢占式或 Spot 辅助工作器。以下示例展示了如何创建包含每种辅助工作器类型的集群:`preemptible`(默认)、Spot(抢占式)和非抢占式。您可以使用其他标志来将 Spot 工作器与非抢占式辅助工作器混合使用。
以下命令会创建“cluster1”,其中包含两个标准抢占式(默认类型)辅助工作器。
gcloud dataproc clusters create cluster1 \ --num-secondary-workers=2 \ --region=us-central1
以下命令使用 secondary-worker-type
标志创建“cluster2”,其中包含两个 Spot(抢占式)辅助工作器。
gcloud dataproc clusters create cluster2 \ --num-secondary-workers=2 \ --secondary-worker-type=spot \ --region=us-central1
示例 3
以下命令使用 secondary-worker-type
标志创建“cluster3”,其中包含两个非抢占式辅助工作器。
gcloud dataproc clusters create cluster3 \ --num-secondary-workers=2 \ --secondary-worker-type=non-preemptible \ --region=us-central1
gcloud dataproc clusters create --secondary-worker-boot-disk-size
命令替换默认磁盘大小。即使集群在创建时没有任何辅助工作器,您也可以指定此标志。
让 Google Cloud 控制台构建您的集群创建请求。
您可以点击 Dataproc 创建集群页面左侧面板底部的 等效 REST 或命令行链接,以让 Google Cloud 控制台构建等效的 API REST 请求或 gcloud 工具命令。
更新包含辅助工作器的集群
如需更新集群以添加或移除辅助工作器,请使用带有 --num-secondary-workers
标志的 gcloud dataproc clusters update
命令。
以下命令会将 example-cluster 更新为使用四个辅助工作器(类型为默认类型或您在创建集群时指定的类型)。
gcloud dataproc clusters update example-cluster \ --num-secondary-workers=4 \ --region=us-central1
从集群中移除所有辅助工作器
如需从集群中移除所有辅助工作器,请使用带有 --num-secondary-workers
(设为 0
)的 gcloud dataproc clusters update
命令。
以下命令会从“example-cluster”中移除所有辅助工作器。
gcloud dataproc clusters update example-cluster \ --num-secondary-workers=0 \ --region=us-central1
REST API
创建包含辅助工作器的集群
创建集群时,使用 Dataproc clusters.create API 将辅助工作器添加至集群中。以下示例展示了如何使用每种辅助工作器类型创建集群:preemptible
(默认)、spot
(可抢占)和 non-preemptible
。您可以使用其他字段来将 Spot 工作器与非抢占式辅助工作器混合使用。
以下 POST 请求会创建一个包含两个标准抢占式(默认类型)虚拟机工作器的“cluster1”。
POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters { "clusterName": "cluster1", "config": { "secondaryWorkerConfig": { "numInstances": 2 } } }
以下 POST 请求会创建一个包含两个 Spot(抢占式)虚拟机工作器的“cluster2”。
POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters { "clusterName": "cluster2", "config": { "secondaryWorkerConfig": { "numInstances": 2, "preemptibility": "SPOT" } } }
示例 3
以下 POST 请求将创建一个包含两个非抢占式辅助工作器的“cluster3”。
POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters { "clusterName": "cluster3", "config": { "secondaryWorkerConfig": { "numInstances": 2, "preemptibility": "NON_PREEMPTIBLE" } } }
更新包含辅助工作器的集群
使用 Dataproc clusters.patch API 添加和移除辅助工作器。
示例以下 PATCH 请求会将集群更新为具有 4 个辅助工作器(类型为默认类型或您在创建集群时指定的类型)。
PATCH /v1/projects/project-id/regions/region/clusters/cluster-name?updateMask=config.secondary_worker_config.num_instances { "config": { "secondaryWorkerConfig": { "numInstances": 4 } } }
排查辅助工作器问题
服务账号权限问题:辅助工作器通过代管式实例组创建。如果存在权限问题,Dataproc 日志不会报告创建辅助工作器失败,但失败的工作器会在 Google Cloud 控制台的集群详情页面虚拟机实例标签页下列出,且没有绿色对勾标记。如需查看列表,请打开 Dataproc 集群页面,然后点击集群名称以打开该集群的集群详细信息页面。
代管实例组权限问题:如需检查代管式实例组权限是否存在问题,请执行以下操作:
- 找到代管式实例组 (
instanceGroupManagerName
) 的名称。控制台
- 打开 Dataproc 集群页面,然后点击集群名称以打开该集群的集群详细信息页面。
- 点击页面底部的 Equivalent REST,然后查看
config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName
值。
Google Cloud CLI
运行带有--format
标志的gcloud dataproc clusters describe
命令以显示instanceGroupManagerName
。gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION \ --format='value(config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName)'
REST API
提交clusters.get
请求以返回config.secondaryWorkerConfig.managedGroupConfig.instanceGroupManagerName
的值。 - 在日志浏览器中查看日志。
选择
Google Compute Engine Instance Group
资源类型,然后过滤出代管式实例组名称。或者,您也可以为 `resource.type="gce_instance_group" 和
resource.labels.instance_group_name=INSTANCE_GROUP_MANAGER_NAME
应用日志记录过滤条件。
- 找到代管式实例组 (
将抢占式辅助工作器与非抢占式辅助工作器搭配使用
创建 Dataproc 集群时,您可以指定混合使用 Spot 实例和非抢占式辅助工作器。
辅助工作器设置,用于将 Spot 实例与非抢占式辅助工作器混合使用
创建 Dataproc 集群时,请使用以下辅助工作器设置,以获得最低级别的辅助工作器容量,并能够在有可用 Spot 虚拟机时增加容量:
辅助工作器数量:要预配的辅助工作器总数。
辅助工作器类型:混合使用 Spot 辅助工作器和非抢占式辅助工作器时,
spot
是辅助工作器类型。standardCapacityBase:要预配的非抢占式(标准)辅助工作器的数量。非抢占式辅助工作器会在其他类型的辅助工作器之前预配。
standardCapacityPercentAboveBase:填充
standardCapacityBase
个辅助工作器后,系统会使用非抢占式虚拟机和 Spot 虚拟机的组合来填充满足所请求辅助工作器总数所需的剩余辅助工作器数量,如下所示:standardCapacityPercentAboveBase
:要用不可抢占型虚拟机填充的剩余辅助工作器的百分比。- 系统会使用 Spot 虚拟机填充剩余的数量,以满足所请求的次要工作器总数。
示例:
- 辅助工作器数量:15
standardCapacityBase
:5standardCapacityPercentAboveBase
30%
结果:
- 不可抢占:8 = 5 (
standardCapacityBase
) + 3 (剩余 10 的 30%) - 展示位置:7(剩余 10 个展示位置的 70%)
- 总计 = 15
创建包含混合使用 Spot 和非抢占式辅助工作器的集群
您可以在创建集群时使用 gcloud CLI 或 Dataproc API 将 Spot 实例与非抢占式辅助工作器混合使用。
gcloud
在本地或在 Cloud Shell 中运行以下命令,以创建包含混合 Spot 实例和非抢占式辅助实例的集群。
gcloud dataproc clusters create CLUSTER_NAME \ --project=PROJECT_ID \ --region=REGION \ --secondary-worker-type=spot \ --num-secondary-workers=NUMBER_SECONDARY_WORKERS \ --secondary-worker-standard-capacity-base=STANDARD_CAPACITY_BASE \ --secondary-worker-standard-capacity-percent-above-base=STANDARD_CAPACITY_PERCENT_ABOVE_BASE \ OTHER_FLAGS_AS_NEEDED
注意:
- CLUSTER_NAME:新集群的名称。
- PROJECT_ID:您的 Google Cloud 项目 ID。 项目 ID 列在 Google Cloud 控制台信息中心的项目信息部分中。
- REGION:用于运行工作负载的可用 Compute Engine 区域。
--secondary-worker-type
:混合使用 Spot 和非抢占式辅助工作器时,请将辅助工作器类型指定为spot
。- STANDARD_CAPACITY_BASE 和 STANDARD_CAPACITY_PERCENT_ABOVE_BASE:请参阅将抢占式辅助工作器与非抢占式辅助工作器混合使用的辅助工作器设置。
- OTHER_FLAGS_AS_NEEDED:请参阅 gcloud dataproc clusters create。
API
如需将 Spot 实例与不可抢占的次要工作器混合使用,请在 cluster.create 请求中设置 Dataproc preemptibility
、standardCapacityBase
和 standardCapacityPercentAboveBase
API 字段,如以下 JSON 示例所示:
{ "clusterName": "CLUSTER_NAME", "config": { "secondaryWorkerConfig": { "numInstances": 15, "preemptibility": "spot", "instanceFlexibilityPolicy": { "provisioningModelMix": { "standardCapacityBase": STANDARD_CAPACITY_BASE "standardCapacityPercentAboveBase": STANDARD_CAPACITY_PERCENT_ABOVE_BASE } } } } }
注意:
- CLUSTER_NAME:新集群的名称。
preemptibility
:混合使用 Spot 工作器和非抢占式辅助工作器时,请指定spot
。- STANDARD_CAPACITY_BASE 和 STANDARD_CAPACITY_PERCENT_ABOVE_BASE:请参阅将抢占式辅助工作器与非抢占式辅助工作器混合使用的辅助工作器设置。
将辅助工作器混合与灵活虚拟机相结合
您可以在创建集群时混合使用 Spot 实例和非抢占式辅助工作器,并为辅助工作器指定灵活的虚拟机规格。
gcloud CLI 示例:
gcloud dataproc clusters create cluster-name \ --project=project-id \ --region=us-cdbtral1 \ --secondary-worker-type=spot \ --num-secondary-workers=15 \ --secondary-worker-standard-capacity-base=5 \ --secondary-worker-standard-capacity-percent-above-base=30 \ --secondary-worker-machine-types="type=n2-standard-8,rank=0" \ --secondary-worker-machine-types="type=e2-standard-8,type=t2d-standard-8,rank=1" ...other flags as needed
辅助工作器混合特性
本部分介绍了与混合使用点播工作器和非抢占式辅助工作器相关的一些行为和特性。
辅助工作器偏好设置
在辅助工作器上调度应用时,Dataproc 不会优先使用 Spot 实例或非抢占式虚拟机。
辅助工作器伸缩
通过自动伸缩或手动伸缩来伸缩辅助工作器时,Dataproc 在添加辅助工作器时会保持请求的抢占式/非抢占式工作器比例。
更新辅助工作器组合设置
您可以在创建 Dataproc 集群时指定 Spot 实例和非抢占式辅助工作器的混合比例。创建集群后,您将无法更改次要工作器组合设置。
Spot 辅助工作器抢占
- Dataproc 不控制 Spot 虚拟机抢占的时间(请参阅 Spot 虚拟机抢占)。
- 发生 Spot 抢占时,辅助工作器组可以暂时以较低的容量运行,直到 Compute Engine 重新预配被抢占的虚拟机。
- Dataproc 不会向辅助工作器组添加超出该组初始设置的工作器数量。