除了使用标准 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 使用代管式实例组 (MIGs) 管理辅助工作器,MIG 会在预配虚拟机后立即异步创建虚拟机(请参阅检查托管实例的状态)。
抢占式和非抢占式辅助工作器
辅助工作器有三种类型:Spot 虚拟机、 标准抢占式虚拟机以及 非抢占式虚拟机。如果您指定辅助工作器 它们的类型必须相同。默认的 Dataproc 辅助工作器类型是标准抢占式虚拟机。
示例:如果您在创建集群时选择了三个辅助工作器,则可以指定三个工作器均为 Spot 虚拟机,也可以指定三个工作器均为(标准)抢占式虚拟机,也可以指定三个工作器均为非抢占式虚拟机,但不能指定每个工作器的类型不同。
Spot 虚拟机是最新类型的 Compute Engine 抢占式虚拟机。它采用与标准抢占式虚拟机相同的低价定价模式,但与标准抢占式虚拟机(最长生命周期为 24 小时)不同,Spot 虚拟机没有最长生命周期。Spot 和标准抢占式虚拟机工作器 从 Dataproc 集群回收和移除 Google Cloud 所需的其他任务。
抢占式工作器
虽然移除抢占式工作器可能会影响作业稳定性,但您可以决定使用抢占式实例来降低非关键数据处理的每小时计算费用,或以较低的总费用创建大型集群(您可以使用 Google Cloud 价格计算器来估算费用)。
为获得最佳结果,集群中的抢占式工作器数量应小于集群中所有工作器(主要工作器和所有辅助工作器)总数的 50%。
使用抢占式工作器时,您的作业很可能会遇到 瞬时单工作器任务失败次数(与作业数相比) 在非抢占式工作器上运行。提高对低层级作业的容忍度 您可以设置类似于 用于自动扩缩集群的默认属性值 增加任务重试次数上限,帮助避免作业 错误。
节省费用的注意事项:使用抢占式虚拟机有时并不一定能节省成本 因为抢占可能会导致作业执行时间延长, 作业成本增加。虽然使用的是增强的灵活模式 (EFM) 有助于缓解这一结果, 抢占式虚拟机因使用场景而异。一般来说,短期作业 适合使用抢占式虚拟机,因为作业期间的 执行费用会更低尝试不同的作业选项,例如不选择抢占式虚拟机 具有 EFM 的抢占式虚拟机来估算费用并得到最佳解决方案。
非抢占式工作器
- 您可以创建包含非抢占式辅助工作器的集群,从而在不影响作业稳定性的前提下扩缩计算。为此,请指定“非抢占式” 作为辅助工作器类型
使用辅助工作器
您可以使用 Google Cloud 控制台、gcloud CLI 或 Dataproc API 创建集群,并指定辅助工作器的数量和类型。
- 辅助工作器的类型必须相同。
- 您可以在创建集群后更新集群,以更改集群中辅助工作器的数量,但不能更改其类型。
- 标签更新会在 24 小时内传播到所有抢占式辅助工作器。标签更新不会传播到现有非抢占式辅助工作器。标签更新会传播到标签更新后添加到集群的所有工作器。例如,如果您纵向扩容集群,则所有新的主要工作器和辅助工作器都将具有新标签。
控制台
通过 Google Cloud 控制台创建 Dataproc 集群时,您可以指定辅助工作器的数量。创建集群后 您可以添加和移除辅助工作器,方法是修改 Google Cloud 控制台。
创建一个包含辅助工作器的集群
在 Google Cloud 控制台的 Dataproc 创建集群页面上,您可以从“配置节点”面板的“辅助工作器节点数”部分,设置要应用于新集群的辅助工作器的数量和类型。指定二级付款资料的数量和类型 “辅助工作器节点”和“可抢占性”字段中的工作器数量 。
更新集群中的辅助实例
要更新集群中辅助工作器的数量,请点击 集群 集群 页面在集群详情页面上,执行以下操作。点击“配置”标签页,然后点击“修改”并更新“辅助工作器节点数”字段中的数目。
从集群中移除所有辅助实例
如需从集群中移除所有辅助工作器,请更新集群
配置中指定了 0
,
辅助工作器节点字段。
gcloud 命令
创建集群时,使用 gcloud dataproc clusters create
命令将辅助工作器添加到集群中。创建集群后,您可以向集群中添加辅助工作器,也可以从中移除辅助工作器
具有
gcloud dataproc clusters update
命令(可以更新辅助工作器的数量,但不是类型)。
创建一个包含辅助工作器的集群
如需创建一个包含辅助工作器的集群,请使用带有 --num-secondary-workers
参数的 gcloud dataproc clusters create
命令。请注意,辅助工作器默认为标准抢占式虚拟机。您可以在创建集群时指定非抢占式辅助工作器
通过设置 --secondary-worker-type=non-preemptible
(dataproc:secondary-workers.is-preemptible.override
属性
不再用于指定辅助工作器的类型)。
以下命令将创建“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
更新集群以添加或移除辅助工作器
如需更新集群以添加或移除辅助工作器,请使用带有 --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 将辅助工作器添加至集群中。请注意,辅助工作器默认为标准抢占式虚拟机。
示例 1以下 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 请求将集群更新为具有四个集群 辅助工作器(属于创建集群时指定的默认类型或类型)。
PATCH /v1/projects/project-id/regions/region/clusters/cluster-name?updateMask=config.secondary_worker_config.num_instances { "config": { "secondaryWorkerConfig": { "numInstances": 4 } } }
排查辅助工作器问题
服务账号权限问题:辅助工作器通过代管式实例组创建;Compute Engine 使用您的项目的 Google API 服务代理服务账号执行代管式实例组操作。此服务账号名称的格式如下:project-id@cloudservices.gserviceaccount.com
。
如果此服务账号存在权限问题,Dataproc 日志不会报告创建辅助工作器失败,但失败的工作器会在 Google Cloud 控制台中的集群详情页面的“虚拟机实例”标签页下列出,且没有绿色对勾标记(打开 Dataproc 集群页面,然后点击集群名称以打开相应集群的集群详情页面)。
代管实例组权限问题:如需检查代管实例组权限是否存在问题,请查看日志浏览器中“Google Compute Engine Instance Group”资源类型”的日志,并过滤相应的实例组 ID。实例组 ID 过滤条件将显示 实例组名称,格式为
dataproc-CLUSTER NAME-sw
实例组 ID 会自动填充到日志记录查询中。除了使用下拉菜单过滤条件之外,您还可以为resource.type="gce_instance_group"
和resource.labels.instance_group_name="dataproc-CLUSTER NAME-sw"
应用日志记录过滤条件。自定义映像权限问题:如果 Dataproc 集群虚拟机是使用从其他项目提取的自定义映像创建的,
Compute Image User
角色必须分配给项目的project-id@cloudservices.gserviceaccount.com
服务账号(请参阅向托管实例组授予对映像的访问权限)。如果未分配正确的角色,此错误消息将显示在日志中:Required 'compute.images.useReadOnly' permission for 'projects/[IMAGE PROJECT]/global/images/[IMAGE NAME]