集群大小调整

默认情况下,Cloud Data Fusion 使用“Autoscale”作为计算配置文件。估算工作负载的最佳集群工作器(节点)数量非常困难,整个流水线的单个集群大小通常不是理想之选。Dataproc 自动扩缩功能提供自动管理集群资源的机制,还启用了集群工作器虚拟机的自动扩缩功能。如需了解详情,请参阅自动扩缩

计算配置页面(您可以在其中查看配置文件列表)上,有一个总核心数列,其中显示了配置文件可扩容到的最大 vCPU 数量,例如 Up to 84

如果您想使用 Dataproc 计算配置文件,可以根据流水线大小管理集群大小。

主节点

主节点使用与集群上运行的流水线或其他应用的数量成比例的资源。如果您是在临时集群上运行流水线,请为主节点使用 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 执行程序所需数量的整数倍。您可以通过查看 YARN 中的 yarn.nodemanager.resource.memory-mb 属性,了解每个工作器为 YARN 预留了多少内存。

如果您使用的是 Dataproc,可供 YARN 容器使用的内存大约为虚拟机内存的 75%。YARN 容器的最小大小也会根据工作器虚拟机的大小进行调整。下表列出了一些常见的 Worker 大小及其对应的 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) Worker CPU Worker 内存 ( GB)
1 2048 4 15
1 3072 4 21
1 4096 4 26
2 8192 4 26

例如,26 GB 的工作器节点可转换为可用于运行 YARN 容器的 20 GB 内存。将执行器内存设置为 4 GB 时,系统会添加 1 GB 作为开销,这意味着每个执行器的 YARN 容器为 5 GB。这意味着该工作器可以运行四个容器,而不会留下任何额外的资源。您还可以乘以工作器的大小。例如,如果将执行器内存设置为 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 内存不足且需要将数据溢写到磁盘时才会使用磁盘。对于这类流水线,磁盘大小和类型通常不会对性能产生很大影响。如果您的流水线要重排大量数据,则磁盘性能将会有所影响。如果您使用的是 Dataproc,建议您使用至少 1 TB 的磁盘大小,因为磁盘性能会随磁盘大小而增强。如需了解磁盘性能,请参阅配置磁盘以满足性能要求

工作器数量

为了最大限度地缩短执行时间,您需要确保集群足够大,能够尽可能并行运行。例如,如果您的流水线源使用 100 个分块读取数据,您需要确保集群足够大,能够同时运行 100 个执行器。

若要确定集群是否配置了过小的内存,最简单的方法是查看一段时间内的 YARN 待处理内存。如果您使用的是 Dataproc,则可以在集群详情页面上找到图表。

如果待处理内存长时间处于较高水平,您可以增加工作器数量,为集群增加相应额外容量。在上例中,集群应增加约 28 GB,以确保实现最大并行度。

增强的灵活模式 (EFM)

借助 EFM,您可以指定在对数据进行重排时仅使用主工作器节点。由于辅助工作器不再负责中间 shuffle 数据,因此当它们从集群中移除时,Spark 作业不会出现延迟或错误。由于主要工作器绝不会缩容,因此集群缩容会更稳定、更高效。如果您要在静态集群上运行包含 Shuffle 的流水线,建议您使用 EFM。

如需详细了解 EFM,请参阅 Dataproc 增强的灵活性模式