最大限度提高集群和作业的灵活性和效率

本页面提供了最佳实践和调度策略,可帮助您设计弹性 Managed Service for Apache Spark 集群,从而最大限度地提高 Cloud de Confiance by S3NS 区域中的资源可获取性、减少预配延迟,并充分利用性能和成本优化。

资源获取能力概览

在刚性 Managed Service for Apache Spark 集群上运行作业会造成单点故障,这可能会因局部不可用或预配延迟而导致作业中断以及集群和作业故障。

对于配置了以下任何严格反模式的集群,资源不可用的风险很高:

  • 固定可用区放置:使用 zone 标志或字段对单个可用区进行硬编码,而不是允许 Managed Service for Apache Spark AutoZone 动态地将集群放置在最佳可用区中。这种反模式会阻止集群创建使用相邻可用区中的可用计算资源。
  • 每个节点角色使用单一机器类型或代系:将节点角色限制为单一机器代系或类型。此反模式会阻止集群回退到备用方案。
  • 最高优先级排名中的机器家族太少:在灵活虚拟机政策的排名 0 中仅列出一个或两个机器家族,即使定义了后备排名也是如此。这种反模式会缩小 Managed Service for Apache Spark 可以首先从中提取资源的资源池,从而增加回退到较低等级或预配延迟的可能性。
  • 使用较少的大型虚拟机进行纵向伸缩:纵向伸缩集群,以依赖少量大型虚拟机。这种反模式会限制调度的灵活性。
  • 全有或全无集群创建:要求同时预配所有工作器节点,而不是将部分集群创建与自动扩缩搭配使用。如果由于资源暂时不可用而无法分配工作器节点,则此反模式会导致集群创建失败。
  • 高峰期调度峰值:在高峰使用时段触发大型批处理流水线,这会增加区域争用。

资源可获取性是指将作业设计为具有硬件灵活性、多可用区和可伸缩性。通过将集群与刚性配置解耦并启用多机器系列回退,您可以提高创建成功率、最大限度地缩短启动延迟时间,并始终如一地实现 SLA。

资源获取建议

采用以下优化措施可提高资源可用性和作业稳定性:

使用灵活虚拟机

借助灵活虚拟机功能,您可以为主节点、主工作器节点和辅助工作器节点指定排名虚拟机类型列表。这会评估列出的虚拟机类型并自动选择具有可用容量的可用区,从而提高创建成功率。

建议:使用具有磁盘替换设置的灵活虚拟机,这样您就可以在同一集群政策中为不同的候选机器家族指定不同的磁盘类型,例如 Hyperdisk 和永久性磁盘。您还可以在单个政策中混合使用第 2 代和第 4 代机器家族,以便在更广泛的池中扩缩作业并绕过容量限制。

在排名 0 处指定至少三个不同的机器家族。 Managed Service for Apache Spark 会首先从优先级最高(排名 0)的列表中进行选择,因此,排名 0 的范围越广,集群创建时可供选择的候选资源池就越大,然后才会回退到较低排名。在第 0 级将第 4 代和第 2 代系列结合使用,是扩大此池的最有效方法。

对于通用工作负载(例如,当前在 N2 或 N2D 机器上运行的作业),请使用以下排名:

  • 排名 0:N4、N4D(使用 Hyperdisk Balanced)、N2、N2D
  • 第 1 级:C4、C4D(使用 Hyperdisk Balanced)、C2D。本地 SSD 可与 C4 和 C4D 搭配使用,但通常 8 或 16 核仅支持 1-2 个本地 SSD。
  • 第 2 级:E2(性能较低;仅在需要时使用)

例如,对于使用 n2d-standard-16 的作业,排名如下:

  • 排名 0: n4-standard-16、n4d-standard-16、n2-standard-16、n2d-standard-16
  • 排名第 1: c4-standard-16、c4d-standard-16、c2d-standard-16
  • 排名第 2: e2-standard-16

由于 N4 和 N4D 需要 Hyperdisk,而 N2 和 N2D 使用永久性磁盘,因此请将排名 0 定义为两个实例选择,它们共享相同的排名,但使用不同的 diskConfig 值。例如,以下 gcloud dataproc clusters create 标志定义了上述示例的主工作节点政策:

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --zone="" \
    --num-workers=NUM_WORKERS \
    --worker-instance-selection='{"machineTypes":["n4-standard-16","n4d-standard-16"],"rank":0,"diskConfig":{"bootDiskType":"hyperdisk-balanced","bootDiskSizeGb":BOOT_DISK_SIZE_GB}}' \
    --worker-instance-selection='{"machineTypes":["n2-standard-16","n2d-standard-16"],"rank":0,"diskConfig":{"bootDiskType":"pd-balanced","bootDiskSizeGb":BOOT_DISK_SIZE_GB}}' \
    --worker-instance-selection='{"machineTypes":["c4-standard-16","c4d-standard-16"],"rank":1,"diskConfig":{"bootDiskType":"hyperdisk-balanced","bootDiskSizeGb":BOOT_DISK_SIZE_GB}}' \
    --worker-instance-selection='{"machineTypes":["c2d-standard-16"],"rank":1,"diskConfig":{"bootDiskType":"pd-balanced","bootDiskSizeGb":BOOT_DISK_SIZE_GB}}' \
    --worker-instance-selection='{"machineTypes":["e2-standard-16"],"rank":2,"diskConfig":{"bootDiskType":"pd-balanced","bootDiskSizeGb":BOOT_DISK_SIZE_GB}}'

使用灵活的虚拟机时,请考虑以下因素:

  • 混合磁盘类型支持:第 3 代和第 4 代机器类型仅支持 Hyperdisk 磁盘类型,不支持永久性磁盘类型。混合使用第 2 代和第 4 代时,请在 instanceFlexibilityPolicy 中为每个实例选择指定 diskConfig。如需了解详情,请参阅磁盘替换。

  • 资源配额:当您定义具有后备类型的灵活虚拟机政策时,Compute Engine 会检查该区域中所有候选类型和磁盘的配额。确保您的项目有足够的计算和磁盘配额分配给所有已配置的项。

  • Compute Engine 折扣:利用灵活承诺使用折扣 (CUD),在多个虚拟机系列和区域中应用基于支出的节省。

  • 价格:使用 Cloud de Confiance 价格计算器比较政策中每个等级的费用。

如需查看配置模板和部署示例,请参阅:

使用自动选择可用区展示位置

使用自动可用区放置,让 Managed Service for Apache Spark 选择最佳可用区来预配资源。如果您使用自定义虚拟私有云 (VPC) 网络,请确保子网在所有区域级可用区中都有足够的 IP 地址。

选择较小的机器类型

设计作业,使其在较小的机器类型(4、8 或 16 核)上横向伸缩,而不是在较大的虚拟机上纵向伸缩。较小的虚拟机大小在各个可用区中具有更高的可用性,有助于防止创建延迟。

  • 检查并重新架构为驱动节点使用大型机器类型的作业。
  • 查看仅运行驱动节点而不运行工作器节点(单节点集群)的作业。在单节点集群上运行的作业无法动态扩容,并且会将执行绑定到单个物理主机。

使用集群自动扩缩

使用集群自动扩缩功能,并设置足够大的实例数上限,以便为资源需求存在波动(峰值)的作业管理容量。

将部分集群创建与自动扩缩搭配使用

将部分集群创建(可让您指定主工作节点的最小数量)与自动扩缩搭配使用。如果集群启动时的工作器数量少于请求的数量,则自动扩缩功能可以在资源可用后动态添加更多工作器。

将作业安排在非高峰时段运行

将作业安排在非高峰时段(例如中午和周末)运行。在非标准时间(例如 10:07 而不是 10:00)安排时间,以避免安排高峰。

后续步骤