Cloud Data Fusion 默认使用“自动扩缩”作为计算配置文件。估算工作负载的最佳集群工作器(节点)数量非常困难,整个流水线的单个集群大小通常不是理想之选。Managed Service for Apache Spark 自动扩缩功能提供自动管理集群资源的机制,还启用了集群工作器虚拟机的自动扩缩功能。如需了解详情,请参阅自动扩缩
在计算配置页面上,您可以看到配置文件列表,其中有一个总核心数列,其中包含配置文件可纵向扩容到的最大 vCPU 数,例如 Up to 84。
如果您想使用 Managed Service for Apache Spark 计算配置文件,可以根据流水线规模管理集群规模。
主节点
主节点使用与集群上运行的流水线或其他应用的数量成比例的资源。如果您是在临时集群上运行流水线,请为主节点使用 2 个 CPU 和 8 GB 内存。如果您使用的是永久性集群,则可能需要更大的主节点才能跟上工作流。如需了解是否需要更大的主节点,您可以监控节点上的内存和 CPU 使用情况。我们建议调整工作器节点的大小,使其至少配备 2 个 CPU 和 8 GB 内存。如果您已将流水线配置为使用更大的内存,则必须使用更大的工作器。
为了最大限度地减少执行时间,请确保您的集群具有足够的节点,以尽可能减少并行处理。
工作器
以下部分介绍了工作节点大小调整的各个方面。
CPU 和内存
我们建议调整工作器节点的大小,使其至少配备 2 个 CPU 和 8 GB 内存。如果您已将流水线配置为使用更大的内存,请使用更大的工作器。例如,如果工作器节点具有 4 个 CPU 和 15 GB 内存,则每个工作器将有 4 个 CPU 和 12 GB 可用于运行 YARN 容器。如果您的流水线配置为运行 1 个 CPU、8 GB 的执行程序,则 YARN 无法在每个工作器节点上运行多个容器。每个工作器节点都会有额外的 3 个 CPU 和 4 GB 内存,但这些资源无法用于运行任何内容,因此会被浪费。为了最大限度地提高集群的资源利用率,您需要确保 YARN 内存和 CPU 是每个 Spark 执行程序所需内存和 CPU 的精确倍数。您可以通过检查 YARN 中的 yarn.nodemanager.resource.memory-mb 属性来查看每个工作器为 YARN 预留了多少内存。
如果您使用的是 Managed Service for Apache Spark,则可供 YARN 容器使用的内存将约为虚拟机内存的 75%。YARN 容器的最小大小也会根据工作器虚拟机的大小进行调整。下表列出了一些常见的工作器大小及其对应的 YARN 设置。
| 工作器 CPU | 工作器内存 (GB) | YARN 节点内存 (GB) | YARN 最小分配内存 (MB) |
|---|---|---|---|
| 1 | 4 | 3 | 256 |
| 2 | 8 | 6 | 512 |
| 4 | 16 | 12 | 1024 |
| 8 | 32 | 24 | 1024 |
| 16 | 64 | 51 | 1024 |
请注意,Spark 请求的内存量会高于为流水线设置的执行程序内存量,并且 YARN 会将请求的内存量向上舍入。例如,假设您已将执行器内存设置为 2048 MB,但未为 spark.yarn.executor.memoryOverhead 提供值,这意味着系统会使用默认值 384 MB。这意味着,Spark 为每个执行程序请求 2048 MB + 384 MB 的内存,而 YARN 会将此内存向上舍入为 YARN 最小分配内存的精确倍数。在 8 GB 的工作器节点上运行时,由于 YARN 的最小分配量为 512 MB,因此会向上舍入为 2.5 GB。这意味着每个工作器可以运行两个容器,用尽所有可用的 CPU,但会留下 1 GB 的 YARN 内存(6 GB - 2.5 GB - 2.5 GB)未使用。这意味着,工作器节点实际上可以稍微小一些,或者可以为执行器分配更多内存。在 16 GB 的工作器节点上运行时,2048 MB + 1024 MB 会向上舍入为 3 GB,因为 YARN 的最小分配量为 1024 MB。这意味着每个工作器节点能够运行四个容器,并且所有 CPU 和 YARN 内存都在使用中。
为了提供相关背景信息,下表显示了在给定一些常见执行器大小的情况下,建议使用的工作器大小。
| 执行器 CPU | 执行程序内存 (MB) | 工作线程 CPU | 工作器内存 ( GB) |
|---|---|---|---|
| 1 | 2048 | 4 | 15 |
| 1 | 3072 | 4 | 21 |
| 1 | 4096 | 4 | 26 |
| 2 | 8192 | 4 | 26 |
例如,26 GB 的工作器节点意味着有 20 GB 的内存可用于运行 YARN 容器。如果将执行器内存设置为 4 GB,则会额外添加 1 GB 作为开销,这意味着每个执行器需要 5 GB 的 YARN 容器。这意味着,工作器可以运行四个容器,而不会有任何剩余的额外资源。您还可以将工作器的大小乘以某个系数。例如,如果执行程序内存设置为 4096 GB,则具有 8 个 CPU 和 52 GB 内存的工作器也能正常运行。Compute Engine 虚拟机会根据核心数量限制虚拟机的内存量。例如,如果虚拟机有 4 个核心,则必须至少有 7.25 GB 的内存,最多有 26 GB 的内存。这意味着,设置为使用 1 个 CPU 和 8 GB 内存的执行器在虚拟机上实际使用 2 个 CPU 和 26 GB 内存。如果将执行器配置为使用 2 个 CPU 和 8 GB 内存,则所有 CPU 都会得到利用。
磁盘
磁盘对于某些流水线来说非常重要,但并非所有流水线都需要。如果您的流水线不包含任何重排,则仅在 Spark 内存不足且需要将数据溢出到磁盘时才会使用磁盘。对于这些类型的流水线,磁盘大小和类型通常不会对性能产生很大影响。如果您的流水线要重排大量数据,磁盘性能将产生影响。如果您使用的是 Managed Service for Apache Spark,建议您使用至少 1 TB 的磁盘大小,因为磁盘性能会随磁盘大小而增强。如需了解磁盘性能,请参阅配置磁盘以满足性能要求。
工作器数量
为了最大限度地缩短执行时间,您需要确保集群足够大,以便尽可能并行运行。例如,如果流水线源使用 100 个拆分来读取数据,您需要确保集群足够大,能够同时运行 100 个执行程序。
判断集群规模是否过小的最简单方法是查看 YARN 待处理内存随时间的变化情况。如果您使用的是 Managed Service for Apache Spark,则可以在集群详情页面上找到相应图表。
如果待处理内存长时间处于较高水平,您可以增加工作器数量,以便为集群增加相应数量的额外容量。在上述示例中,集群应增加约 28 GB,以确保实现最高并行度。
增强的灵活模式 (EFM)
EFM 可让您指定在 shuffle 数据时仅涉及主要工作器节点。由于辅助工作器不再负责处理中间 shuffle 数据,因此当它们从集群中移除时,Spark 作业不会遇到延迟或错误。由于主工作器永远不会缩容,因此集群可以更稳定、更高效地缩容。如果您在静态集群上运行包含 shuffle 的流水线,建议您使用 EFM。
如需详细了解 EFM,请参阅 Managed Service for Apache Spark 增强灵活性模式。